如何比较两个arraycollection
collectionArray1 = ({first: 'Dave', last: 'Matthews'},...........n values
collectionArray = ({first: 'Dave', last: 'Matthews'},...........n values
如何比较......如果没有警报,则等于警报nochange
答案 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)
但是那不行(不是三重符号)。因为===用于查看类。
如果对象存在于数组中,我会编写一个名为check的函数。
创建一个数组来保存未找到的元素。例如notFound
遍历所有元素并查看它们是否存在于Collection2中,如果元素不存在,则将其添加到notFound数组中。使用您在第1步中创建的功能
现在检查Collection2,如果找不到元素,请将其添加到notFound数组中。
没有5。
答案 3 :(得分:0)
Dude,使用mx.utils.ObjectUtil ...... actionscript的创建者已经考虑过这个。
ObjectUtil.compare(collection1, collection2) == 0;