pet_home_server/src/server/GoUtil/randUtil.go
2024-11-21 19:36:12 +08:00

52 lines
787 B
Go

package GoUtil
import (
"math/rand"
"time"
)
func RandMap(d map[int]int) int {
total := 0
for _, v := range d {
total += v
}
// 生成一个 [0, total) 范围内的随机数
r := rand.Intn(total)
// 根据随机数选择一个键
for k, v := range d {
if r < v {
return k
}
r -= v
}
// 如果没有找到,返回一个默认值
return -1
}
// 从d中随机选取n个元素 不放回
func RandMapNum(d map[int]int, n int) []int {
if n <= 0 || n > len(d) {
return nil
}
if n == len(d) {
for k := range d {
return []int{k}
}
}
r := make([]int, 0, n)
for i := 0; i < n; i++ {
k := RandMap(d)
r = append(r, k)
delete(d, k)
}
return r
}
func GetRand() *rand.Rand {
randS := rand.NewSource(time.Now().UnixNano())
return rand.New(randS)
}