数组 – as3随机数组 – 随机化数组 – actionscript 3

你如何使用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(),您不仅可以传递Array.CASEINSENSITIVE,Array.DESCENDING等排序选项,还可以传递自己的自定义比较函数引用(回调),它接受两个参数(要比较的数组中的两个元素).从AS3文档:

A comparison function should take two arguments to compare. Given the elements A and B, the result of compareFunction can have a negative, 0, or positive value:

  • A negative return value specifies that A appears before B in the sorted sequence.
  • A return value of 0 specifies that A and B have the same sort order.
  • A positive return value specifies that A appears after B in the sorted sequence.

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

function compareElements ( elementA : SomeClass, elementB : SomeClass ) : int;

当您需要按特殊属性对数组元素进行排序时,此方法非常有用.在随机化的情况下,compareFunction随机返回-1,0或1,并使数组元素切换它们的位置(索引).我发现更好的随机化(在我的主观和数学上未经测试的意见)是当方法仅返回-1和1.还要记住,使用自定义比较函数doesn’t compare elements sequentially排序函数,因此在某些特殊情况下,随机化结果可能与您的不同期望.

相关文章
相关标签/搜索