指定した範囲内の数値をランダムに並べ替える、みたいな処理をしたいという要望がたまにあるので、個人的によくやる方法をメモしておきます。
サンプルコード
JavaScript
function rangeRandom(min, max) { // 範囲の最小値 var rangeMin = min; // 範囲の最大値 var rangeMax = max; // 範囲内の数値の個数 var rangeLength = rangeMax - rangeMin + 1; // 並び替え前の数値を管理する配列 var countArr = []; // 並び替え後の数値を格納する配列 var randomArr = []; // 範囲内の数値をcountArrに格納 for(var i = 0; i < rangeLength; i++) { countArr[i] = i + rangeMin; } for(var i = 0; i < rangeLength; i++) { // 0~countArrの個数 の範囲から、数値をランダムに抽出 var randomTarget = Math.floor(Math.random() * countArr.length); // randomArrに数値を格納(randomTargetの数値を格納するのではなく、countArrのrandomTarget番目の配列の数値を格納) randomArr[i] = countArr[randomTarget]; // 同じ数値を再度使わないように、今回使った数値をcountArrから削除しておく。 countArr.splice(randomTarget, 1); } return randomArr; } // テスト console.log('min:0 max:5 の場合 ' + rangeRandom(0, 5)); console.log('min:4 max:8 の場合 ' + rangeRandom(4, 8)); console.log('min:-3 max:4 の場合 ' + rangeRandom(-3, 4)); console.log('min:-12 max:-4 の場合 ' + rangeRandom(-12, -4));
指定範囲内の数値をランダムに並べ替えるデモページ
コンソールに指定範囲とその結果を表示するようにしています。
実装内容はコード内に記載しているコメントの通りです。
コメントが承認されるまで時間がかかります。