Golang 取范围随机数
代码
package main
import (
"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) + min
if 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: 134
main.go:22: 252
main.go:22: 138
main.go:22: 159
main.go:22: 289
main.go:22: 287
main.go:22: 277
main.go:22: 110
main.go:22: 258
main.go:22: 259
Golang 取得N个的不重复范围随机数
package main
import (
"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)
// 如果最大值-最小值,小于可用总数, 直接会死循环,直接返回0
if (max - min) < number {
return ret
}
for len(unique) < number {
unique[GetRangeRandomNumbers(min, max)] = true
}
i := 0
for k, _ := range unique {
ret[i] = k
i++
}
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