Удалить выбранные элементы из результатов поиска

Случай использования:

  1. Конечный пользователь что-то ищет, и ArrayCollection возвращается с объектами Result. Это отображается в сетке данных.
  2. Конечный пользователь выбирает несколько результатов поиска и "перемещает" их в другую сетку данных для последующего использования.
  3. Конечный пользователь выполняет другой поиск.

ПРОБЛЕМА. Некоторые из результатов поиска могут содержать что-то, что пользователь уже выбрал ранее и перенес на вторую сетку данных. Я хочу удалить их из второго результата поиска.

Как я могу сделать это быстро и эффективно в коде Flex?

2 ответа

Решение

disableAutoUpdate() для обеих коллекций массивов

переберите первый и для каждого элемента второго удалите его, если он присутствует в первом (или адаптируйте алгоритм на основе того, что вы действительно хотите - не уверен)

enableAutoUpdate () в конце.

Цикл по коллекции массивов может быть быстрым, если не отправлено никаких событий.

Второй вариант, вы также можете перебрать дешевую копию, состоящую из массива, например arraycollection.source.concat() или даже вектора, если все ваши элементы одного типа. Это даст максимальную скорость, но в долгосрочной перспективе вы можете проиграть, так как в конце вам придется конвертировать обратно в коллекцию массивов.

Поэтому я бы придерживался первого варианта.

В настоящее время я реализовал коллекцию хешей (расширяет ArrayCollection). Хеш допускает только уникальные значения, поэтому, в конце концов, он служит моей цели, даже если пользовательский интерфейс может сбить пользователя с толку. Вероятно, будет реализован вышеописанный метод позднее.:)

Другие вопросы по тегам