如何使用动作脚本比较两个数组集合

时间:2010-07-27 05:10:11

标签: actionscript-3

如何比较两个arraycollection

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

如何比较......如果没有警报,则等于警报nochange

4 个答案:

答案 0 :(得分: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");
}       

答案 1 :(得分: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+"...";
}

答案 2 :(得分:0)

我打算这样说。

if(collectionArray === collectionArray1) 

但是那不行(不是三重符号)。因为===用于查看类。

  1. 如果对象存在于数组中,我会编写一个名为check的函数。

  2. 创建一个数组来保存未找到的元素。例如notFound

  3. Collection1中的
  4. 遍历所有元素并查看它们是否存在于Collection2中,如果元素不存在,则将其添加到notFound数组中。使用您在第1步中创建的功能

  5. 现在检查Collection2,如果找不到元素,请将其添加到notFound数组中。

  6. 没有5。

答案 3 :(得分:0)

Dude,使用mx.utils.ObjectUtil ...... actionscript的创建者已经考虑过这个。

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