[Golang]Shuffle()でスライス(Slice)をシャッフルするには?

Go

どうも、ちょげ(@chogetarou)です。

Shuffle()を使ってスライス(Slice)をシャッフルしてランダムに並び替える方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

Shuffle()を使ってスライス(Slice)をシャッフルしてランダムに並び替えるには、関数を使います。

まず、「math/rand」をインポートします。

import "math/rand"

次に、randからShuffle()を呼び出します。

Shuffle()の第1引数にスライス(Slice)の要素数、第2引数に整数の2つの引数を持つ関数を指定します。

そして、関数の処理で、スライス(Slice)の関数の第1引数と第2引数のインデックスの要素を入れ替えます。

//slice=対象のスライス
rand.Shuffle(len(slice), func(i, j int) {
    slice[i], slice[j] = slice[j], slice[i] //スライスの要素を入れ替える
})

上記のrand.Shuffle()は、要素を入れ替えたスライス(Slice)をシャッフルします。

使用例

package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	numbers := []string{"one", "two", "three", "four", "five"}

	rand.Seed(time.Now().UnixNano()) //乱数のシード設定

	rand.Shuffle(len(numbers), func(i, j int) {
		numbers[i], numbers[j] = numbers[j], numbers[i]
	})

	fmt.Println(numbers)
}
出力:
[four one two five three]

コメント

タイトルとURLをコピーしました