May  09,  2007

配列の要素をランダムに並び替える方法

Flashのスライドショーでxmlファイルから読み込んだ写真をランダムに表示したいという依頼があり、それまでのスライドショーは配列に格納した画像のパスを先頭から順番に読み込んでいたので作りを少し修正しました。


配列の要素をランダムに抽出したいと思った時にパッと思いつくのがMath.random()を使ったやり方だと思いますが、それだと同じ要素を繰り返し抽出されてしまう場合があります。
重複なく要素を取り出したい場合は以下のスクリプトを使ってみてください


var i = array_name.length;//array_nameというのは任意に作成された配列名です
while (i--) {
var j = Math.floor(Math.random()*(i+1));
var t = array_name[i];
array_name[i] = array_name[j];
array_name[j] = t;
}


考え方としては配列からランダムに要素を抜き出すのではなく、
配列を生成した後にその配列をランダムに並び替える、という感じです。
なので画像を先頭から読み込む処理自体は変更していません。


割といろんなところで使える処理だと思います。


このエントリーの情報はほぼ野中さんの「非公式テクニカルノート一覧」の転用です。
もっと詳しく知りたい方は以下のURLへどうぞ。
配列を偏りなくランダムに並替える

このエントリをはてなブックマークに登録yamada :10:04 AM

このエントリーのトラックバックURL:

http://www.link-log.net/mt/mt-tb.cgi/731

コメントを投稿

今までこのblogでコメントしたことがない場合、オーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらくお待ちください。