어떻게 actionscript 3를 사용하여 배열을 랜덤 화합니까?as3 무작위 배열 - 무작위 배열 - actionscript 3
답변
는에 Array.sort() 함수를 사용하여 짧은 버전이 있습니다 :
var arr : Array = [0,1,2,3,4,5,6,7,8,9];
function randomize (a : *, b : *) : int {
return (Math.random() > .5) ? 1 : -1;
}
trace(arr.sort(randomize));
는 일종의 두 번 당신이 할 수있는 "충분한"임의성 :
편집을하지 않는 경우 - 설명 줄마다 :
Array
클래스 메서드 sort()
의 경우과 같은 정렬 옵션을 전달할 수 있습니다.등등 두 개의 매개 변수 (배열에서 비교할 두 요소)를 받아들이는 사용자 지정 비교 함수 참조 (콜백)도 있습니다. AS3 설명서에서 :
비교 함수는 비교할 두 개의 인수를 취해야합니다. 요소 A와 B가 주어지면 compareFunction의 결과는 음수, 0 또는 양수 값을 가질 수 있습니다.
- 음수 반환 값은 A가 정렬 순서에서 B 앞에 표시되도록 지정합니다.
- 반환 값 0은 A와 B가 동일한 정렬 순서를 갖도록 지정합니다.
- 양수 리턴 값은 A가 정렬 된 순서에서 B 다음에 표시되도록 지정합니다.
참고 : 비교 함수 매개 변수 (배열이 입력되어있는 경우)를 입력하고 배열을 정렬 할 때
function compareElements (elementA : SomeClass, elementB : SomeClass) : int;
이 방법은 매우 유용하다 : 예를 들어, 원하는 이름을 가질 수 있습니다 요소들을 그들의 특별한 속성들로 랜덤 화의 경우, compareFunction
는 무작위로 -1, 0
또는 1
을 돌려 주어, 배열 요소로 장소 (인덱스)를 바꿉니다. 나는 더 나은 무작위 화 (주관적이고 수학적으로 검증되지 않은 의견에서) 방법이 -1
과 1
만 반환 할 때라는 것을 발견했다. 또한 사용자 정의 비교 함수 doesn't compare elements sequentially을 사용하여 정렬 기능을 염두에 두어야합니다. 따라서 일부 특수한 경우에는 임의 화 결과가 예상과 다를 수 있습니다.
매우 도움이되는 것으로 나타났습니다. 나는 그것이 당신을 도울 수 있기를 바랍니다.
// Array to Randomize
var firstArray:Array = ["One","Two","Three","Four","Five","six","seven","eight","nine","ten"];
trace(firstArray); // Prints in order
var newArray:Array = new Array();
function randomizeArray(array:Array):Array
{
var newArray:Array = new Array();
while (array.length > 0)
{
newArray.push(array.splice(Math.floor(Math.random()*array.length), 1));
}
return newArray;
}
var randomArray:Array = randomizeArray(firstArray);
trace(randomArray); // Prints out randomized :)
또한 것이 필요한 경우는, 장소에 배열을 무작위로 할 수 있도록 더 나은 방법이, 그리고 당신이 원래 배열의 단일 복사본 다음 등을 만들하지 않습니다.
package
{
import flash.display.Sprite;
public class RandomizeArrayExample extends Sprite
{
public function RandomizeArrayExample()
{
super();
testDistribution();
}
private function testDistribution():void
{
var hash:Object = { };
var tester:Array = [1, 2, 3, 4];
var key:String;
for (var i:int; i < 1e5; i++)
{
randomize(tester);
key = tester.join("");
if (key in hash) hash[key]++;
else hash[key] = 1;
}
for (var p:String in hash) trace(p, "=>", hash[p]);
}
private function randomize(array:Array):Array
{
var temp:Object;
var tempOffset:int;
for (var i:int = array.length - 1; i >= 0; i--)
{
tempOffset = Math.random() * i;
temp = array[i];
array[i] = array[tempOffset];
array[tempOffset] = temp;
}
return array;
}
}
}
원본 배열을 무작위로 대상 배열에 무작위로 삽입하려는 대체 요구 사항이있었습니다. Rytis와 마찬가지로 나는 배열의 forEach, map 및 sort 함수에 대한 큰 팬이다.
var randomInsert:Function = function callback(item:*, index:int, array:Vector.<MyItem>):void
{
var j:Number = Math.floor(Math.random() * targetArray.length);
targetArray.splice(j,0,item);
}
targetArray = new Vector.<MyItem>();
sourceArray1.forEach(randomInsert, this);
sourceArray2.forEach(randomInsert, this);
여기가 더 쉬운 기능입니다. 다차원 배열에도 적용됩니다.
function randomizeArray(array:Array):Array
{
var newArray:Array = new Array();
while (array.length > 0)
{
var mn=Math.floor(Math.random()*array.length)
newArray[newArray.length]=array[mn]
array.splice(mn,1)
}
return newArray;
}
배열을 섞어 야합니다 (요소를 반복 할 수 없음).이 기능을 사용할 수
/**
* Shuffles array into new array with no repeating elements. Simple swap algorithm is used.
*/
public function shuffleArray(original:Array):Array
{
// How many swaps we will do
// Increase this number for better results (more shuffled array, but slower performance)
const runs:int = original.length * 3;
var shuffled:Array = new Array(original.length);
var i:int;
var a:int;
var b:int;
var temp:Object;
// Copy original array to shuffled
for(i=0; i<shuffled.length; i++){
shuffled[i] = original[i];
}
// Run random swap cycle 'runs' times
for(i=0; i<runs; i++){
// There is a chance that array element will swap with itself,
// and there is always small probability it will make your shuffle
// results not that good, hence try to experiment with
// different runs count as stated above
a = Math.floor(Math.random() * original.length);
b = Math.floor(Math.random() * original.length);
// Swap messages
temp = shuffled[a];
shuffled[a] = shuffled[b];
shuffled[b] = temp;
}
return shuffled;
}
사용법 :
var testArray:Array = ["Water", "Fire", "Air", "Earth"];
trace(shuffleArray(testArray).concat());
이 내가
const QUANT_CARTAS: int = 36;
//get the 36 numbers into the array
for (var i: int = 0; i < QUANT_CARTAS; i++)
{
cartas.push(i);
}
//shuffles them =)
for (var moeda: int = QUANT_CARTAS - 1; moeda > 0; moeda--)
{
var pos: int = Math.floor(Math.random() * moeda);
var carta: int = cartas[moeda];
cartas[moeda] = cartas[pos];
cartas[pos] = carta;
}
// and add them using the random order...
for (i = 0; i < QUANT_CARTAS; i++)
{
var novaCarta: Carta = new Carta();
novaCarta.tipoCarta = cartas[i];
etcetcetc.............
}
배열
에서 임의의 문자열을 선택 메모리 게임 (36 개) 카드를 내 배열을 무작위 방법입니다function keyGenerator(len:Number):String
{
function randomRange(minNum:Number, maxNum:Number):Number
{
return (Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum);
}
var hexArray = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'];
var key = "";
for (var i=0; i<len; i++)
{
key += hexArray[randomRange(0,hexArray.length-1)];
}
return key;
}
사용 :
trace(keyGenerator(16));
- 1. 무작위 배열
- 2. AS2 배열 무작위 선택
- 3. jQuery 배열 무작위 인덱스
- 4. 문자열 배열 목록의 무작위 문자열
- 5. 무작위 문자로 2 차원 배열 채우기
- 6. 무작위 텍스트 배열 + 페이드 인 간격 + 셔플
- 7. 키를 사용하여 무작위 배열 셔플이 필요합니다.
- 8. 무작위 접근 배열, 중복을 건너 뛰는 방법?
- 9. 중복이없는 java에서 무작위 포인트 배열 생성
- 10. 무작위 Silverlight 3 문제
- 11. 무비 클립 배열 ActionScript 3
- 12. 무작위
- 13. 스프링 보안 3 + 무작위 소금
- 14. Actionscript 3 : 문서 클래스의 배열 범위
- 15. ActionScript 3 배열 반환 런타임 오류
- 16. ActionScript 배열 비교
- 17. ActionScript 배열 객체 바인딩?
- 18. 무작위 따옴표 타이머에 스크립트?
- 19. 자바 무작위 클래스 프로그램
- 20. 루프의 각 패스에 대한 루비 무작위 배열 호출?
- 21. 안드로이드의 다른 Integer [] 배열에서 이미지의 무작위 Integer [] 배열 만들기
- 22. 자기 무작위?
- 23. actionscript : 다차원 배열 사용
- 24. 인스턴스가있는 배열 루프, as3
- 25. 무작위 셔플?
- 26. 무작위 통보
- 27. 무작위 방향
- 28. JScrollPane의 무작위
- 29. ActionScript 추적 배열 indexOf?
- 30. 보유 배열
나는 (Math.random() <.5)라고 생각하십니까? -1 : 1'이 더 좋습니다. – Florent
동의하고, 더 효율적이며, 둥글 필요가 없습니다. – BadFeelingAboutThis
이것은 꽤 굉장합니다. 선을 무너 뜨리고 그들이하는 일을 설명 할 수 있습니까? 마찬가지로 (a : *, b : *)와 정렬 등이 무엇입니까? –