在函数中排序数组无法给出正确的结果

时间:2012-10-23 22:06:46

标签: arrays actionscript-3 function sorting

我正在尝试对数组进行排序,找出哪一个更大。 所以我有原始数组(CurMobRM),一个具有相同值但排序和反转(Ary)的数组,最后是一个具有原始数组值(检查)位置的数组。

一个简单的例子就是假设原始值具有值(3,8,5,2,7)并且我们对它们进行排序所以我们有一个具有相同值但位置不同的数组(8,7,5, 3,2)和最终数组具有每个值的原始位置(3,0,2,4,1)。

var CurMobRM:Array = new Array (3,8,5,2,7);
var checking:Array= new Array;
putattackorder();

function putattackorder() {
    var Ary:Array = CurMobRM;
    var lo:Number;
    Ary.sort ();
    Ary.reverse ();
    trace (Ary)
    for (lo = 0; lo < 5; lo++) {
        for (loop = 0; loop < 5; loop++) {
            if (Ary[lo] == CurMobRM[loop]) {
                checking[lo] = loop
            }
        }
    }
    trace (checking)
    trace (Ary)
    trace (CurMobRM)
}

问题在于,当我对Ary进行排序时,似乎CurMobRM也在同一时间排序......我不明白为什么。跟踪(检查)总是给出0,1,2,3,4

1 个答案:

答案 0 :(得分:3)

这是因为在ActionScript 3中array对象通过引用分配,而不是。要解决此问题,您可以使用不带参数的slice方法(切片完整数组)。

例如,在您的代码中:

var CurMobRM:Array = new Array (3,8,5,2,7);
var checking:Array= new Array;
putattackorder();

function putattackorder()
{
    //perform a copy by value of array
    var Ary:Array = CurMobRM.slice();

    var lo:uint;
    var loop:uint;

    Ary.sort();

    //not necessary?
    //Ary.reverse();
    //trace (Ary)

    for (lo = 0; lo < 5; lo++) {
        for (loop = 0; loop < 5; loop++)
        {
            if (Ary[lo] == CurMobRM[loop])
            {
                checking[lo] = loop
            }
        }
    }

    trace (checking)
    trace (Ary)
    trace (CurMobRM)
}

输出结果为:

3,0,2,4,1

-1,2,3,5,7,8-

3,8,5,2,7

我相信这就是你要找的东西。希望能帮到你!