這周需求涉及到要把一個數組的內部順序打亂,參考了下網上的資料,其實很簡單,就是把數組元素隨機交換下就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就是時間戳,因爲每次都不同,生成隨機數序列也都不同。