
【JS】配列をシャッフルするアルゴリズム、Fisher-Yates
2018/02/05
配列内容をシャッフルして出力する際に「Fisher-Yates」というアルゴリズムを利用すると、素早く、偏りもなくシャッフルできるとのことで、コピペできるように備忘録としてポストします。
Fisher-Yatesアルゴリズム
参考にしたサイト様
以下のサイト様が分かりやすかったです。
世界最速の配列シャッフルアルゴリズム、Fisher-Yatesアルゴリズム: PandaNoir
http://pandanoir.seesaa.net/article/341955064.html
http://pandanoir.seesaa.net/article/341955064.html
Fisher-Yates shuffle - Wikipedia, the free encyclopedia
https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
スクリプト
[js]
function shuffle(array) {
var n = array.length, t, i;
while (n) {
i = Math.floor(Math.random() * n--);
t = array[n];
array[n] = array[i];
array[i] = t;
}
return array;
}
[/js]
使い方
[js]
testArray = ["a", "b", "c", "d", "e", "f", "g"];
resultArray = shuffle(testArray);
console.log(resultArray); // ←★結果
[/js]
結果
一例です。
["c", "a", "e", "b", "g", "f", "d"]