📅  最后修改于: 2023-12-03 14:52:18.322000             🧑  作者: Mango
在 Golang 中,我们可以使用 math/rand
库生成随机数。然而,生成唯一的随机数数组可能需要我们进行一些额外的工作。
可以使用以下步骤生成一个唯一的随机数数组:
import (
"fmt"
"math/rand"
"time"
)
rand.Seed(time.Now().UnixNano())
size := 10 // 数组大小
min := 1 // 随机数范围最小值
max := 100 // 随机数范围最大值
var arr []int
for len(arr) < size {
num := rand.Intn(max-min+1) + min // 生成随机数
if !contains(arr, num) { // 检查数组中是否已存在该数
arr = append(arr, num) // 唯一,添加到数组中
}
}
func contains(arr []int, num int) bool {
for _, a := range arr {
if a == num {
return true
}
}
return false
}
这个方法通过不断生成随机数并检查是否已存在于数组中来确保唯一性。如果数组中不存在该随机数,将其添加到数组中。
另一种生成唯一随机数数组的方法是使用 Fisher-Yates 算法。这个算法通过将数组随机排序来生成唯一的随机数数组。
import (
"fmt"
"math/rand"
"time"
)
rand.Seed(time.Now().UnixNano())
size := 10 // 数组大小
min := 1 // 随机数范围最小值
max := 100 // 随机数范围最大值
arr := make([]int, size)
for i := 0; i < size; i++ {
arr[i] = i + min
}
for i := size - 1; i > 0; i-- {
j := rand.Intn(i + 1)
arr[i], arr[j] = arr[j], arr[i]
}
这个方法使用了 Golang 中的 Fisher-Yates 算法实现。首先,我们初始化一个包含整数范围内所有可能值的数组,然后通过随机交换数组元素的位置来实现随机排序。
以上介绍了两种在 Golang 中生成唯一随机数数组的方法。第一种方法通过不断生成随机数并检查是否已存在于数组中来保证唯一性。第二种方法使用了 Fisher-Yates 算法来生成随机数数组。
你可以根据具体需求选择适合的方法,生成唯一随机数数组。