0

我正在尝试对数组进行排序并找到哪个更大。所以我有原始数组(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

4

1 回答 1

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

2,3,5,7,8

3,8,5,2,7

我相信这是您正在寻找的。希望有所帮助!

于 2012-10-23T22:23:42.003 回答