hakeの日記

Windows環境でプログラミングの勉強をしています。

Go言語 - データのランダムシャッフル

ライブラリにシャッフルがなさそうだったので作成。Fisher-Yates shuffleというアルゴリズムを使用しました。

package main

import "fmt"
import "time"
import "math/rand"

func shuffle(list []int){
	for i := len(list); i > 1; i-- {
		j := rand.Intn(i)          // 0〜(i-1) の乱数発生
		list[i - 1], list[j] = list[j], list[i - 1]
	}
}

func main() {
	rand.Seed(time.Now().UnixNano())

	// データ要素数指定、および初期データ作成
	size := 10
	list := make([]int, size, size)
	for i := 0; i < size; i++ { list[i] = i }

	// シャッフル
	shuffle(list)

	for _, d := range list {
		fmt.Println(d)
	}
}