Fisher-Yates shuffleで配列シャッフル [js/ts/php]

Fisher-Yates shuffleで配列シャッフル [js/ts/php]

2022-06-197 min read

目次

  1. 概要
  2. ソース
  3. 参考にしたサイト

概要

ts/js/php で配列をシャッフルする際の実装メモです。

配列のシャッフルにはFisher-Yates shuffleを利用しました。

ソース

typescript

const shuffleArr = (src: number[]): number[] => {
  const dst = src.slice();
  let i = src.length;
  while (i > 0) {
    i--;
    const j = Math.floor(Math.random() * (i + 1));
    [dst[i], dst[j]] = [dst[j], dst[i]];
  }
  return dst;
};
console.log(shuffleArr([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]));
// [ 4, 8, 6, 0, 2, 1, 9, 7, 3, 5 ]

js

const shuffleArr = (src) => {
  const dst = src.slice();
  let i = src.length;
  while (i > 0) {
    i--;
    const j = Math.floor(Math.random() * (i + 1));
    [dst[i], dst[j]] = [dst[j], dst[i]];
  }
  return dst;
};

php

function shuffleArr(array $src)
{
  $i = count($src);
  while ($i > 0) {
    $i--;
    $j = random_int(0, $i + 1);
    [$src[$i], $src[$j]] = [$src[$j], $src[$i]];
  }
  return $src;
}
echo(implode(",", shuffleArr([0,1,2,3,4,5,6,7,8,9])));

参考にしたサイト

Author
githubzennqiita
ただの備忘録です。

※外部送信に関する公表事項