[TypeScript]配列(Array)をシャッフルするには?

TypeScript

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

配列(Array)をランダムに並び替えてシャッフルする方法を紹介します。

スポンサーリンク

方法

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

配列(Array)をランダムに並び替えてシャッフルする方法は、2つあります。

sort()

1つは、sort()を使う方法です。

まず、配列からsort()を呼び出します。

sort()の引数に、2つの引数を持つラムダ式を指定します。

そして、ラムダ式で「0.5 – Math.random()」を返します。

//array=配列
array.sort((a, b) => 0.5 - Math.random())

上記のsort()は、呼び出した配列(Array)をランダムに並び替えてシャッフルします。

使用例

const nums: number[] = [1, 2, 3, 4, 5]

nums.sort((a, b) => 0.5 - Math.random())

console.log(nums)
出力:
[4, 2, 1, 3, 5] 

フィッシャー–イェーツのアルゴリズム

もう1つは、フィッシャー–イェーツのアルゴリズムを使う方法です

まず、for文で配列の要素数の数だけループします。

そして、ループ処理で、Math.random()を使ってフィッシャー–イェーツのアルゴリズムの処理を実装します。

//array=シャッフルする配列
for (let i = array.length - 1; i > 0; i--) {
   const j = Math.floor(Math.random() * (i + 1));
   [array[i], array[j]] = [array[j], array[i]];
}

上記のforループは、対象の配列をランダムに並び替えます。

使用例

function shuffleArray(array: number[]) {
    for (let i = array.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [array[i], array[j]] = [array[j], array[i]];
    }
}

const nums: number[] = [1, 2, 3, 4, 5];

shuffleArray(nums);

console.log(nums);
出力:
[4, 1, 3, 2, 5] 

まとめ

配列(Array)をランダムに並び替えてシャッフルする方法は、次の2つです。

  • sort()を使う方法
    array.sort((a, b) => 0.5 - Math.random());
  • フィッシャー–イェーツのアルゴリズムを使う方法

コメント

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