Go言語[Golang]sliceの要素をランダムにシャッフルするコード

Share on:

この記事は約1 分で読めます。

目次

sliceのshuffle実行コード(スライスのランダムな並び替えコード)

 1package main
 2
 3import (
 4	"fmt"
 5	"math/rand"
 6	"time"
 7)
 8
 9func main() {
10	a := []int{0, 1, 2 ,3, 4, 5, 6, 7, 8, 9}
11
12	fmt.Println(a) 
13	// [0 1 2 3 4 5 6 7 8 9]
14
15	rand.Seed(time.Now().UnixNano()) 
16    for i := range a {
17        j := rand.Intn(i + 1)
18        a[i], a[j] = a[j], a[i]
19	}
20	
21	fmt.Println(a) 
22	// [2 6 5 7 9 8 1 4 3 0]
23}

解説

  • math/randtimeパッケージを使用

  • Seedの設定

  • 初期値ではSeedが1に固定されているため、Seedに何かしらの値を設定しないと、いつも同じ結果(今回の場合、並び替え順)が返ってきます。

  • そこで、いくつか方法がありますが、今回は現在の時間をSeedに設定しています。

rand.Seed(time.Now().UnixNano())

  • for文で回しながら要素を入れ替える
  • 要素数が不明ということを前提にfor i := range a {でループさせます。
  • 元の要素a[i]を乱数を使って導き出したj番目のaと入れ替えています。