在Generic中查找速度

时间:2011-02-25 21:12:41

标签: c# .net algorithm generics performance

我需要用高效的o(1)来实现搜索算法。如果我使用HashSet并尝试按User.FirstName搜索,例如,它是否正确?如果没有,请给我一个建议,我怎么才能实现这个搜索?

2 个答案:

答案 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提供了一个非常好的解决方案。