as3随机数组 - 随机化数组 - 动作脚本3

Pap*_*eau 7 arrays random flash actionscript-3

你如何使用actionscript 3随机化一个数组?

Ryt*_*kna 18

有一个使用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 ) );
Run Code Online (Sandbox Code Playgroud)

如果你没有"足够"随机性,你可以排序两次:)

编辑 - 逐行说明:

对于Array类方法,sort()您不仅可以传递类似等的排序选项,还可以传递Array.CASEINSENSITIVE, Array.DESCENDING自己的自定义比较函数引用(回调),它接受两个参数(要比较的数组中的两个元素).来自AS3文档:

比较函数应该有两个参数进行比较.给定元素A和B,compareFunction的结果可以具有负值,0或正值:

  • 负返回值指定A在排序序列中出现在B之前.
  • 返回值0指定A和B具有相同的排序顺序.
  • 正返回值指定A在排序序列中出现在B之后.

注意:比较函数参数可能是键入的(如果您的数组是键入的)并且具有您想要的任何名称,例如:

function compareElements ( elementA : SomeClass, elementB : SomeClass ) : int;
Run Code Online (Sandbox Code Playgroud)

当您需要按特殊属性对数组元素进行排序时,此方法非常有用.在随机化的情况下,compareFunction随机返回-1, 01使数组元素切换它们的位置(索引).我发现更好的随机化(在我的主观和数学上未经测试的意见)是方法只返回-11.另外请注意,使用自定义比较功能的排序功能不会按顺序比较元素,因此在某些特殊情况下,随机化结果可能与您的预期不同.

  • 我想`(Math.random()<.5)?-1:1`更好. (2认同)