Быстро получить набор свойств, используемых в огромной коллекции в C # - PullRequest
3 голосов
/ 29 апреля 2010

У меня есть огромная Коллекция (которую я могу привести как перечисляемый, используя OfType <> ()) объектов. Каждый из этих объектов имеет свойство Category, которое извлекается из списка в другом месте приложения. Эта коллекция может достигать размеров сотен предметов, но возможно, что только 6/30 возможных категорий фактически используются. Какой самый быстрый способ найти эти 6 категорий? Размер огромной Коллекции отговаривает меня от простой итерации всей вещи и возврата всех уникальных значений, так есть ли более быстрый способ сделать это?

В идеале я бы собрал категории в List<string>.

Ответы [ 2 ]

2 голосов
/ 29 апреля 2010

Если вы используете .NET 3.5, попробуйте следующее:

List<string> categories = collection
    .Cast<Foo>()
    .Select(foo => foo.Category)
    .Distinct()
    .ToList();

Это должно быть очень быстро.

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

0 голосов
/ 29 апреля 2010

Размер огромной Коллекции отговаривает меня от перебора всей вещи и возврата всех уникальных значений

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

Попробуйте, если решение Mark Byers достаточно быстро для вас, и беспокоитесь о его производительности только вэто не так.

...