gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/myx/randutil/rand-util.go (about) 1 package randutil 2 3 import "math/rand" 4 5 // 如果max小于min,返回min 6 // 如果min等于0,返回0 7 func Range(min int, max int) int { 8 if max < min { 9 return min 10 } 11 if min == 0 { 12 return min 13 } 14 return min + rand.Intn(max-min) 15 } 16 17 // key = 键, val=权重 18 func Weight(source map[int]int) int { 19 20 var ( 21 prev int 22 list []int 23 m = map[int]int{} 24 max int 25 ) 26 27 count := 0 28 for key, val := range source { 29 cur := prev + val 30 list = append(list, cur) 31 m[count] = key 32 count++ 33 34 prev = cur 35 max = cur 36 } 37 38 if max == 0 { 39 return 0 40 } 41 n := rand.Intn(max) 42 idx := 0 43 for i, val := range list { 44 if n <= val { 45 idx = i 46 break 47 } 48 } 49 50 return m[idx] 51 } 52 53 // key = 键, val=权重 54 func WeightString(source map[string]int) string { 55 56 var ( 57 prev int 58 list []int 59 m = map[int]string{} 60 max int 61 ) 62 63 count := 0 64 for key, val := range source { 65 cur := prev + val 66 list = append(list, cur) 67 m[count] = key 68 count++ 69 70 prev = cur 71 max = cur 72 } 73 74 if max == 0 { 75 return "" 76 } 77 n := rand.Intn(max) 78 idx := 0 79 for i, val := range list { 80 if n <= val { 81 idx = i 82 break 83 } 84 } 85 86 return m[idx] 87 }