2010-07-27 1 views
1

как сравнить два ArrayCollectionкак сравнить два массив коллекции с помощью сценария действий

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

как compare..if равного просто предупреждение NoChange если не бдительны chaged

+0

Значит, порядок вещей? – bhups

ответ

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) 

Но это не будет работать (не triple = знаки). Поскольку === используется для просмотра классов.

  1. Я бы написал функцию, называемую проверкой существования объекта в массиве.

  2. Создайте массив для хранения элементов, которые не найдены. например notFound

  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 ... создатель ActionScript уже подумали об этом.

ObjectUtil.compare(collection1, collection2) == 0; 
Смежные вопросы