我需要用高效的o(1)来实现搜索算法。如果我使用HashSet并尝试按User.FirstName搜索,例如,它是否正确?如果没有,请给我一个建议,我怎么才能实现这个搜索?
答案 0 :(得分:3)
您需要使用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);
答案 1 :(得分:0)
创建System.Collections.ObjectModel.KeyedCollection
的实施
根据{{3}},它提供O(1)索引检索和接近O(1)的键控检索。“但是,它仍然具有Dictionary' and
HashTable`具有不允许重复键的限制。如果你需要重复的键值,或者你需要能够在不同的时间使用不同的项目作为键,那么Reed Copsey提供了一个非常好的解决方案。