这周需求涉及到要把一个数组的内部顺序打乱,参考了下网上的资料,其实很简单,就是把数组元素随机交换下就OK了,下面附上go实现的代码,
func Random(arr []string) {
if len(arr) <= 0 {
return
}
rand.Seed(time.Now().Unix())
for i := len(arr) - 1; i >= 0; i-- {
num := rand.Intn(len(arr))
arr[i], arr[num] = arr[num], arr[i]
}
return
}
注意一个点就行,生成随机数是,每次采用不同的seed,否则rand会采用默认seed,也就是1,那么每次生成随机数的序列都是相同的,随机打乱后的结果也都是一样的。
关于Random Seed,这里也解释下,现在大部分关于随机数的实现都是伪随机数,都是以一个真随机数(种子)作为初始条件,然后用一定的算法不停迭代产生随机数。比较常用的seed就是时间戳,因为每次都不同,生成随机数序列也都不同。