2011-01-20 198 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沒有任何重複的號碼......是有辦法從中選擇一個隨機數第一個列表,然後減去它,所以我不選擇該號碼兩次?

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`函數。 – 2011-01-20 01:57:46

+0

我剛纔看到你可以使用拼接......但也有一個Array.prototype方法應該更快? shadetyler.blogspot.com/2008/12/array-shuffle-as3.html – redconservatory 2011-01-20 02:26:55

回答

3

標題說洗牌一個數組,所以如果你正在尋找一個理想的洗牌,你可能希望Fisher–Yates算法是無偏見的。

所以,如果你想使用/保留原來的,你會初始化myRandomList

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

然後創建一個範圍內的隨機數說 ,然後交換myRandomList[a]myRandomList[i]其中i是當前元素。

// 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 
1

我沒有做太多動作,但如果有一個可調整大小的數組類,你可以隨機的數據...防爆傳輸:在

陣列從 陣列

for循環來自迭代器j。預生成這個數字,因爲它會改變 I =得到從 到[J]。隨機指數=從[I] 從[我]刪除

如果沒有大小可變的數組類,你可以隨時做隨機交換

陣列theArray

蘭特=用於蘭特 IDX1隨機數 ,IDX2 - >設置爲隨機數 溫度= theArray [IDX1] theArray [IDX1] = theArray [IDX2] theArray [idx2] = temp

類似的東西 這只是psudo代碼。