指定範囲内の数値をランダムに並べ替える

指定した範囲内の数値をランダムに並べ替える、みたいな処理をしたいという要望がたまにあるので、個人的によくやる方法をメモしておきます。

サンプルコード

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));

指定範囲内の数値をランダムに並べ替えるデモページ
コンソールに指定範囲とその結果を表示するようにしています。
実装内容はコード内に記載しているコメントの通りです。
 

このエントリーをはてなブックマークに追加

関連記事

コメントを残す

メールアドレスが公開されることはありません。
* が付いている欄は必須項目です

CAPTCHA


コメントが承認されるまで時間がかかります。

2024年3月
 12
3456789
10111213141516
17181920212223
24252627282930
31