2010-11-19 5 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

Смежные вопросы