import (
"math/rand"
"time"
)
func randIntInRangeWithExclusion(start, end int, exclude []int) int {
rand.Seed(time.Now().UnixNano())
for {
num := rand.Intn(end-start) + start
if !contains(exclude, num) {
return num
}
}
}
func contains(s []int, val int) bool {
for _, v := range s {
if val == v {
return true
}
}
return false
}
该函数接收三个参数:范围的起始值 start
、范围的结束值 end
和要排除的整数数组 exclude
。函数使用 Go 的 math/rand
包生成一个随机数,并检查它是否在排除列表中。如果没有,就返回该数字,否则就继续生成随机数,直到找到一个不在排除列表中的数字为止。
为了避免在多次调用时生成相同的随机数,函数在 rand.Seed()
中使用当前时间的纳秒级别做为种子。函数也使用了一个辅助的 contains()
函数,用于检查一个整数是否在一个整数数组中。
示例用法:
package main
import "fmt"
func main() {
excluded := []int{2, 4, 6, 8}
randNum := randIntInRangeWithExclusion(1, 10, excluded)
fmt.Println(randNum)
}
运行上述代码会在 1 到 10 之间返回一个随机整数,但排除了数组中的数字 2、4、6 和 8。