开发者

Efficient way to search object from list of object in c#

I have a list which contains more than 75 thousand object. To search item from list currently I开发者_JAVA百科 am using following code.

from nd in this.m_ListNodes
where
   nd.Label == SearchValue.ToString()
   select
   nd;

Is this code is efficient?


How often do you need to search the same list? If you're only searching once, you might as well do a straight linear search - although you can make your current code slightly more efficient by calling SearchValue.ToString() once before the query.

If you're going to perform this search on the same list multiple times, you should either build a Lookup or a Dictionary:

var lookup = m_ListNodes.ToLookup(nd => nd.Label);

or

var dictionary = m_ListNodes.ToDictionary(nd => nd.Label);

Use a dictionary if there's exactly one entry per label; use a lookup if there may be multiple matches.

To use these, for a lookup:

var results = lookup[SearchValue.ToString()];
// results will now contain all the matching results

or for a dictionary:

WhateverType result;
if (dictionary.TryGetValue(SearchValue.ToString(), out result))
{
    // Result found, stored in the result variable
}
else
{
    // No such item
}


No. It would be better if you used a Dictionary or a HashSet with the label as the key. In your case a Dictionary is the better choice:

var dictionary = new Dictionary<string, IList<Item>>();

// somehow fill dictionary

IList<Item> result;
if(!dictionary.TryGetValue(SearchValue.ToString(), out result)
{
    // if you need an empty list 
    // instead of null, if the SearchValue isn't in the dictionary
    result = new List<Item>(); 
}

// result contains all items that have the key SearchValue
0

上一篇:

下一篇:

精彩评论

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

最新问答

问答排行榜