容器综合作业
符合类型容器综合案例
/* 封装一个对整形切片 进行排序的函数 随机招收一些学生进班 随机生成学生的成绩 对学生成绩排名并输出 封装一个对全班学生成绩进行排名的函数 将上述封装好的俩个函数丢入mylib包中 在当前工程中调用mylib包内的函数 在其他工程中调用mylib包内的函数 */
案例
1 package main 2 3 import ( 4 "fmt" 5 "math/rand" 6 "time" 7 ) 8 9 //全局变量 10 11 var names []string 12 13 //--包初始化函数,执行在main函数之前. 14 func init() { 15 fmt.Println("***包初始化***") 16 names = make([]string, 0) 17 } 18 19 func main() { 20 //招生 21 AddStudent("小王", "小红", "小张", "小许", "小明", "小曼") 22 fmt.Println(names) 23 24 //把学生随机分配成绩 也就是考试 25 scoreMap := TakeExam(names...) 26 fmt.Println(scoreMap) 27 28 //显示排名 29 ShowRanking(scoreMap) 30 31 } 32 33 //对成绩做降序排名 进行排序 34 func ShowRanking(scoreMap map[string]int) { 35 36 //形成名单,锁死姓名的循序,才能开始排序. 37 names := make([]string, 0) 38 for name, _ := range scoreMap { 39 names = append(names, name) 40 } 41 42 /*对names 按分数的降序进行排列*/ 43 for i := 0; i < len(scoreMap)-1; i++ { 44 //锁定第i位,将i后面的每个人(i),的分数与第i个人比较. 45 // 将剩余的同志中,最高分数的人,调整到当前位置. 46 for j := i + 1; j < len(names); j++ { 47 //如果第四个人的分数比第三个人高,就互换位置. 48 if scoreMap[names[j]] > scoreMap[names[i]] { 49 names[i], names[j] = names[j], names[i] 50 } 51 52 } 53 54 } 55 /*按names的顺序输出姓名和排序*/ 56 for i, name := range names { 57 fmt.Printf("第%d名:%-6s \t %3d\n", i+1, name, scoreMap[name]) 58 } 59 } 60 61 62 //给examres考试,为每个人生成随机成绩. 63 func TakeExam(examers ...string) (scoreMap map[string]int) { 64 65 //定义出scoreMap里面是空的 66 scoreMap = make(map[string]int) 67 68 for _, name := range examers { 69 score := GetRandomInt(100) 70 scoreMap[name] = score 71 72 } 73 return 74 } 75 76 //生成0-n之间的随机分数 77 func GetRandomInt(n int) int { 78 time.Sleep(time.Nanosecond) //睡1毫秒 79 r := rand.New(rand.NewSource(time.Now().UnixNano())) 80 return r.Intn(n + 1) 81 } 82 83 //添加学生的函数 84 func AddStudent(newcomers ...string) { 85 names = append(names, newcomers...) 86 87 } 88 89 /* 90 ***包初始化*** 91 [小王 小红 小张 小许 小明 小曼] 92 map[小张:75 小许:93 小明:25 小曼:39 小王:51 小红:21] 93 第1名:小许 93 94 第2名:小张 75 95 第3名:小王 51 96 第4名:小曼 39 97 第5名:小明 25 98 第6名:小红 21 99 */