开发者

Look up speed in Generic

I need to implement a search algoritm with efficient o(1). If I use HashSet and will try search by User.FirstName for example, whether it is right? If not, give me an开发者_JS百科 advice, please, how can I realize this search?


You'll need to use Dictionary<TKey,TValue>, where the TKey is built on the search type. However, if you're using something like FirstName as a search term, you may have multiple values with the same key, which will cause problems.

A potentially better option would be to use ToLookup to generate an ILookup for you. For example:

IEnumerable<Person> people = GetPeople();

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

You could then do:

var peopleNamedFred = nameLookup["Fred"];
foreach(var fred in peopleNamedFred)
    Console.WriteLine("{0} {1}, fred.FirstName, fred.LastName);


Create an implementation of System.Collections.ObjectModel.KeyedCollection.
According to the MSDN reference it " provides both O(1) indexed retrieval and keyed retrieval that approaches O(1)." However, it still has the limitations that Dictionary' andHashTable` have with duplicate keys not being allowed. If you need duplicate key values, or you need to be able to use different items as keys at different times, then Reed Copsey gives a very good solution.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜