Посмотрите скорость в Generic - PullRequest
2 голосов
/ 26 февраля 2011

Мне нужно реализовать алгоритм поиска с эффективным o (1).Если я использую HashSet и попробую поиск по User.FirstName например, правильно ли это?Если нет, дайте мне совет, пожалуйста, как я могу реализовать этот поиск?

Ответы [ 2 ]

3 голосов
/ 26 февраля 2011

Вам нужно будет использовать Dictionary<TKey,TValue>, где TKey построено на типе поиска.Однако если вы используете что-то вроде FirstName в качестве поискового запроса, у вас может быть несколько значений с одним и тем же ключом, что вызовет проблемы.

Потенциально лучшим вариантом будет использование ToLookup для генерации ILookup для вас.Например:

IEnumerable<Person> people = GetPeople();

var nameLookup = people.ToLookup(p => p.FirstName);

Вы можете сделать:

var peopleNamedFred = nameLookup["Fred"];
foreach(var fred in peopleNamedFred)
    Console.WriteLine("{0} {1}, fred.FirstName, fred.LastName);
0 голосов
/ 26 февраля 2011

Создать реализацию System.Collections.ObjectModel.KeyedCollection.
Согласно справочнику MSDN он «обеспечивает индексированный поиск O (1) и поиск по ключу, приближающийся к O (1)». Тем не менее, он по-прежнему имеет ограничения, которые Dictionary' and HashTable` имеют, поскольку повторяющиеся ключи не допускаются. Если вам нужны дубликаты значений ключей или вы должны иметь возможность использовать разные элементы в качестве ключей в разное время, тогда Reed Copsey предлагает очень хорошее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...