通過rand把數組順序隨機打亂

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章