Как сравнить два массива коллекции с помощью сценария действия - PullRequest
1 голос
/ 27 июля 2010

как сравнивать два массиваколлекция

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

как сравнивать .. если равно только оповещение nochange, если не оповещение chaged

Ответы [ 4 ]

1 голос
/ 27 июля 2010

Если вы просто хотите узнать, отличаются ли они друг от друга, то есть по длине, порядку или отдельным элементам, вы можете сделать следующее, сначала проверяя, отличаются ли длины, а затем проверяя, не индивидуальны ли они. элементы разные. Это не слишком многоразовое использование, для читателя оставлено упражнение, чтобы разбить его на более чистые куски:)

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");
}       
1 голос
/ 31 марта 2011
/* 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 голосов
/ 11 февраля 2013

Чувак, используй mx.utils.ObjectUtil ... создатели actioncript уже подумали об этом.

ObjectUtil.compare(collection1, collection2) == 0;
0 голосов
/ 27 июля 2010

Я собирался сказать это.

if(collectionArray === collectionArray1) 

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

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

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

  3. в Collection1 просмотрите все элементы и посмотрите, существуют ли они в Collection2, если элемент не существует, добавьте его в массив notFound. Используйте функцию, созданную вами в шаге 1

  4. Теперь проверьте Collection2, если элемент не найден, добавьте его в массив notFound.

  5. Нет 5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...