2011-01-20 2 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 싶습니다을 첫 번째 목록을 누른 다음 SUBTRACT로 두 번 선택하지 마십시오. UPDATE

:

I 단지 그러나 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

방금 ​​splice를 사용할 수 있다는 것을 알았지 만 더 빨라야하는 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]에서 제거가 을 변경하기 때문에,이 번호를 미리 생성

더 크기 변경 가능한 배열 클래스, 당신은 항상 할 수가없는 경우 랜덤 스와핑

배열 theArray에게

랜드 = 랜드 IDX1위한 난수 , idx2 금지 -> 난수로 설정 온도 = theArray [IDX1] theArray [IDX1 = theArray [idx2] theArray [idx2] = 임시

그게 그냥 psudo 코드입니다.