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, 0
或1
使数组元素切换它们的位置(索引).我发现更好的随机化(在我的主观和数学上未经测试的意见)是方法只返回-1
和1
.另外请注意,使用自定义比较功能的排序功能不会按顺序比较元素,因此在某些特殊情况下,随机化结果可能与您的预期不同.