Golang 如何生成唯一随机数数组
在Golang中生成唯一随机数数组有许多方法,但是如何保证数组中的数字不会重复呢?本篇文章将为大家介绍一种可行的方法,即使用math/rand包和time包来生成随机数数组。
步骤一:导入包
首先,需导入math/rand和time两个包。math/rand包提供了生成随机数的函数,而time包提供了种子,确保每次生成的随机数都是不同的。
import (
"math/rand"
"time"
)
步骤二:设置种子
接下来,我们需要设置一个种子。在上一步中,我们提到了time包提供了种子。我们可以使用time.Now().UnixNano()函数来获取当前时间的纳秒级别时间戳作为种子,确保每次生成的随机数都不同。
rand.Seed(time.Now().UnixNano())
步骤三:生成唯一随机数数组
现在,我们已经设置好了种子。接下来,我们可以使用rand.Perm(n int)函数来生成一个长度为n的唯一随机数数组。这个函数将返回一个长度为n的整数切片,其中的数字是[0, n)之间的整数,且不存在重复数字。
下面是一个生成长度为10的唯一随机数数组的示例代码:
uniqueArray := rand.Perm(10)
fmt.Println(uniqueArray)
输出结果可能是:
[1 4 6 2 3 8 5 7 9 0]
步骤四:使用唯一随机数数组
现在,我们已经成功地生成了一个长度为n的唯一随机数数组。我们可以使用它来做很多有趣的事情,比如随机打乱一个数组:
array := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
rand.Shuffle(len(array), func(i, j int) {
array[i], array[j] = array[j], array[i]
})
fmt.Println(array)
输出结果可能是:
[5 9 4 10 6 8 3 1 7 2]
完整代码
下面是生成唯一随机数数组的完整代码:
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano())
uniqueArray := rand.Perm(10)
fmt.Println(uniqueArray)
array := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
rand.Shuffle(len(array), func(i, j int) {
array[i], array[j] = array[j], array[i]
})
fmt.Println(array)
}
结论
生成唯一随机数数组在Golang中有很多种方法,但使用math/rand包和time包是其中一种可行的方法。我们可以使用rand.Perm(n int)函数生成一个长度为n的唯一随机数数组,并使用它来做很多有趣的事情,比如随机打乱一个数组。