Flex ArrayCollection Обнаружение дубликатов по значению свойства - PullRequest
2 голосов
/ 19 ноября 2010

Мне любопытно, как лучше всего определить, что коллекция массивов содержит дубликаты объектов, определяемые значением свойства объекта. Например,

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

Обратите внимание, что у этого массива есть 3 элемента. 2 элемента имеют одинаковое значение для свойства name. Я бы посчитал это дубликатом.

Есть идеи, как будет выглядеть тело этого метода? У меня есть идеи, но ни одна из них не выглядит очень элегантно.

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

Ответы [ 3 ]

3 голосов
/ 19 ноября 2010

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

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 голос
/ 28 февраля 2012

Вы можете расширить метод, указанный в: http://www.fridaymushroom.com/fm/search-an-item-arraycollection-in-flex

1 голос
/ 10 июля 2011
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;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...