TL;DR
shuffle.go
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
arr := []string{"hyde", "ken", "tetsuya", "yukihiro"}
shuffle(arr)
fmt.Println(arr)
}
func shuffle(a []string) {
rand.Seed(time.Now().UnixNano())
for i := range a {
j := rand.Intn(i + 1)
a[i], a[j] = a[j], a[i]
}
}
何かの順番を決めるときにお使いください。
バージョン
# go version
go version go1.9.2 linux/amd64
使い方
# go run shuffle.go
[ken yukihiro tetsuya hyde]
slice
Go言語にはsliceがあります。arrayとよく似ています。arrayは要素数が決まっていますが、sliceは要素数を決めずに使うことができます。柔軟に増やしたり減らしたりできますね。
コロン区切りで要素を指定することができます。開始/終端片方だけの指定もできます。
math/rand
mathライブラリの中からrandクラスを使います。Rand.Intnは0からi+1の範囲でランダムな整数を返します。
毎回異なる結果になるように、Seed値にunix時間のnano単位を入れています。
これを要素回数分、ランダムな相手と入れ替えを実施しています。
おしまい。