2012-10-23 77 views
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

回答

3

這是因爲在ActionScript 3 array對象是通過引用分配,而不是由。爲了克服這個問題,你可以使用沒有參數的slice方法(slice full array)。

例如,在您的代碼:

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

我相信這是你在找什麼。希望能提供幫助!

+0

當場! THX! (我使用的反面是壞的,因爲我想要最大的第一!) –