2011-01-20 22 views
2

をシャッフル:ランダム化または私は配列を持っていると言う配列

myList:Array = new Array(); 
myList = [1,2,3,4,5,6,7,8,9]; 

myRandomList:Array = new Array(); 

for (var i:uint = 0; i < myList; i++) { 
      var item:Number = Math.floor(Math.random() * myList.length-1) + 1; 
      myRandomList.push(item); 
     } 

唯一のことは、私はmyRandomListが重複番号を持っていたいのですが、あること...から乱数を選択する方法があります私はその番号を2回選択しないので、最初のリストをしてからそれを送りますか? UPDATE

私はちょうどしかしshadetyler.blogspot.com/2008/12/array-shuffle-as3.html

Array.prototype.shuffle = function(){ 
for(var i = 0; i < this.length; i++){ 
var a = this[i]; 
var b = Math.floor(Math.random() * this.length); 
this[i] = this[b]; 
this[b] = a; 
} 

から配列をシャッフルするこの方法を見ましたが、そこにありますこれを関数として書き直す方法は? }

+0

'array.splice'関数を見てください。 –

+0

私はあなたがスプライスを使用できることを見ました...しかし、高速であるはずのArray.prototypeメソッドもありますか? shadetyler.blogspot.com/2008/12/array-shuffle-as3.html – redconservatory

+0

配列シャッフリングの実装を試してください。ここで答えてください:http://stackoverflow.com/a/25702799/1521021 – Glogo

答えて

3

タイトルには配列がシャッフルされているので、理想的なシャッフルを探している場合はFisher–Yatesアルゴリズムが偏っていてもかまいません。あなたがあなたの元に保つ/使用したい場合は

だから、あなたはmyRandomList

var myRandomList: Array = new Array(myList.length); 

を初期化します次に範囲で乱数を作成 を言うと、私は現在の要素ですmyRandomList[i]myRandomList[a]を交換。

// Random number 
var a = Math.floor(Math.random() * myList.length); 
// A swap 
myRandomList[i] = myRandomList[a]; 
// put whatever is in index a in the ith position 
myRandomList[a] = myList[i]; 
// restore whatever was in the ith position to index a 
+0

これは素晴らしいことです!しかし、リンクにはActionscript 3の例はありません...もう少し詳しいことはできますか? – redconservatory

+0

@redconservatory配列内のスポットを切り替えるだけなので、要素を要素に押し込む必要はありません。重複については 'a == i 'ならば変更はない。 – phwd

1

私は多くのActionScriptを行っていないが、サイズ変更可能な配列クラスがあります場合は、ランダムデータ...例を転送することができます:オーバーforループ

配列の配列 から

へイテレータjから。 I = [J]へ からのランダムなインデックスを取得=から[i]は [I]から削除し、それが が変更されますので、この番号を事前生成

何のサイズ変更可能な配列のクラスは、あなたが常にできるがない場合乱数 TEMP = theArray [IDX1] theArray [IDX1] = theArray [IDX2] に設定> - ランダムなスワップ

アレイtheArray

ランド=ランド IDX1、IDX2用乱数 を行いますtheArray [idx2] = temp

何かがそのような ちょうどpsudoコードです。

関連する問題