Самая быстрая структура данных, чтобы проверить, соответствует ли свойство в списке объектов - PullRequest
6 голосов
/ 10 марта 2012

У меня есть список, в котором хранится несколько объектов.Каждый объект имеет свойство в виде переменной.

Я хотел бы иметь возможность проверить, содержит ли какой-либо элемент в этом списке определенное свойство.Похож на метод словаря ContainsKey.Эта структура данных должна содержать чрезвычайно большое количество значений, возможно даже миллионы, и поэтому я хотел бы использовать структуру данных, которая может проверять свойства как можно быстрее.

Был бы словарь самым быстрым для этой работыили есть более быстрые структуры данных?

РЕДАКТИРОВАТЬ:

Вот небольшой пример того, чего я хотел бы достичь:

Dictionary<string, Person> persons = new Dictionary<string, Person>(); //where string contains the Person's name

bool isPresent = persons.ContainsKey("Matt");

Ответы [ 2 ]

7 голосов
/ 10 марта 2012

Похоже, вам в основном нужен HashSet<T>, содержащий все значения свойств - при условии, что вы действительно просто хотите узнать, содержится оно или нет.

Например:

var allNames = new HashSet<string>(people.Select(person => person.Name));
0 голосов
/ 10 марта 2012

Это зависит. Если вы можете загрузить данные в словарь один раз, а затем запросить их несколько раз, то словарь, безусловно, является самой быстрой из возможных структур данных. Если несколько элементов могут иметь одно и то же значение свойства, вам придется создать Dictionary<TKey,List<TValue>> или использовать поиск LINQ.

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

...