2010-07-27 62 views
1

如何比較兩個的ArrayCollection比較兩個數組集合如何使用動作腳本

collectionArray1 = ({first: 'Dave', last: 'Matthews'},...........n values 
collectionArray = ({first: 'Dave', last: 'Matthews'},...........n values 

如何compare..if等於只是警告NOCHANGE如果不警惕chaged

+0

那麼物品的排序是否重要? – bhups 2010-07-27 08:41:06

回答

1

如果你只是想知道,如果他們是彼此不同的,按長度,命令或單個項目的意義,你可以做到以下幾點,它首先檢查看看長度是否不同,然後檢查各個元素是否不同。這是不是非常可重複使用的,它留給作爲練習讀者拆分此分裂成大塊清潔:)

public function foo(coll1:ArrayCollection, coll2:ArrayCollection):void { 
    if (coll1.length == coll2.length) { 
     for (var i:int = 0; i < coll1.length; i++) { 
      if (coll1[i].first != coll2[i].first || coll1[i].last != coll2[i].last) { 
       Alert.show("Different"); 
       return; 
      } 
     } 
    } 

    Alert.show("Same"); 
}  
0

我正想說這個。

if(collectionArray === collectionArray1) 

但是,這不會工作(不是三倍=跡象)。 As ===用於查看課程。

  1. 我會寫一個函數叫做檢查數組中是否存在對象。

  2. 創建一個數組來保存未找到的元素。例如找不到

  3. 在Collection1中遍歷所有元素,看看它們是否存在於Collection2中,如果一個元素不存在,則將它添加到notFound數組中。使用您在步驟1中創建的功能

  4. 現在檢查Collection2,如果找不到元素,則將其添加到notFound數組中。

  5. 沒有5.

1
/* elements need to implement valueOf 
public function valueOf():Object{} 
*/ 
public static function equalsByValueOf(
    first:ArrayCollection, 
    seconde:ArrayCollection):Boolean{ 

    if((first==null) != (seconde==null)){ 
     return false; 
    }else if(!first && !seconde){ 
     return false; 
    } 

    if(first.length!=seconde.length){ 
     return false; 
    } 

    var commonLength:int = first.length; 
    var dictionary:Dictionary = new Dictionary();    
    for(var i:int=0;i<commonLength;i++){ 
     var item1:Object = first.getItemAt(i); 
     var item2:Object = seconde.getItemAt(i); 
     dictionary[item1.valueOf()]=i; 
     dictionary[item2.valueOf()]=i; 
    } 

    var count:int = 0;    
    for (var key:Object in dictionary) 
    { 
     count++; 
    } 
    return count==commonLength; 
} 


/* valueOf sample 
* something like javaObject.hashCode() 
* use non changing fields(recommended) 
*/ 

public function valueOf():Object{ 
return "_"+nonChangeField1+"_"+nonChangeField2+"..."; 
} 
0

哥們,使用mx.utils.ObjectUtil ...動作的創造者已經想過這個了。

ObjectUtil.compare(collection1, collection2) == 0;