Быстрое извлечение подмножества свойств, используемых в огромной коллекции в C #

StackOverflow https://stackoverflow.com/questions/2738155

Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top