Golang 取范围随机数
代码
package mainimport ("log""math/rand""time")// 范围随机数 (包含最大值和最小值,可从 0 开始)func GetRangeRandomNumbersA(min, max int) int {r := rand.New(rand.NewSource(time.Now().UnixNano()))if min >= max || min < 0 || max < 0 {return max}min--rn := r.Intn(max-min) + minif rn != max {rn++}return rn}// 取范围随机数 (不包含最大值,不可从 0 开始)func GetRangeRandomNumbersB(min, max int) int {r := rand.New(rand.NewSource(time.Now().UnixNano()))if min >= max || min == 0 || max == 0 {return max}return r.Intn(max-min) + min}func main() {for i := 0; i < 10; i++ {log.Println("A", GetRangeRandomNumbersA(0, 3))}for i := 0; i < 10; i++ {log.Println("B", GetRangeRandomNumbersA(1, 3))}}
输出
main.go:22: 134main.go:22: 252main.go:22: 138main.go:22: 159main.go:22: 289main.go:22: 287main.go:22: 277main.go:22: 110main.go:22: 258main.go:22: 259
Golang 取得N个的不重复范围随机数
package mainimport ("log""math/rand""time")// 范围随机数func GetRangeRandomNumbers(min, max int) int {r := rand.New(rand.NewSource(time.Now().UnixNano()))if min >= max || min == 0 || max == 0 {return max}return r.Intn(max-min) + min}// 取得N个的不重复范围随机数func GetNotRepeatRandomNumbers(min int, max int, number int) []int {unique := make(map[int]bool)ret := make([]int, number)// 如果最大值-最小值,小于可用总数, 直接会死循环,直接返回0if (max - min) < number {return ret}for len(unique) < number {unique[GetRangeRandomNumbers(min, max)] = true}i := 0for k, _ := range unique {ret[i] = ki++}return ret}func main() {rn := GetNotRepeatRandomNumbers(10, 99, 10) //[72 56 64 40 93 34 66 89 88 18]log.Println(rn)}
参考
https://www.cnblogs.com/HachikoT/p/15941915.html
https://zhuanlan.zhihu.com/p/94684495
