2010-11-19 30 views
2

我很好奇檢測arraycollection是否包含由對象的屬性值確定的重複對象的最佳方法。例如,Flex ArrayCollection通過屬性值檢測重複

var _myArrayCollection:ArrayCollection = new ArrayCollection([{name: "name1", value: "value1"}, {name: "name2", value: "value2"}, {name: "name1", value: "value3"}]); 

請注意,此arraycollection有3個項目。其中2個項目的name屬性值相同。我會認爲這是重複的。

任何想法這個方法的主體是什麼樣子?我有想法,但沒有一個人覺得很優雅。

private function containsDuplicates(ac:ArrayCollection, property:String):Boolean 

回答

3

您可以將給定屬性的值保存到數組上,並在該數組內搜索重複內容。唯一不好的部分是搜索時間隨着數組大小的增加而增加。

var valueArray:Array = new Array(); 
for each (object:Object in ac) { 
    var value = object[property]; 
    if (valueArray.indexOf(value) >= 0) { 
     return true; 
    } else { 
     valueArray.push(value); 
    } 
} 
return false; 

一個更有效的(但非常複雜的解決方案)可能是保存值,排序它們,並執行一次運行來搜索重複項。

1
for(var i:int=0; i<buscatype.length; i++) 
{ 
    for(var j:int = (i+1); j <buscatype.length; j++) 
    { 
     if(buscatype[i].produst_type_nameCol==buscatype[j].produst_type_nameCol) 
     { 
      buscatype.removeItemAt(j); 
      j-=1; 
     } 
    } 
} 
+0

請添加描述爲代碼的某種程度的諸如說明它將如何解決這個問題。 – Ren 2012-11-17 13:41:48