2013-01-04 13 views
0

У меня есть List<T> от objects с несколькими полями. Как я могу наиболее эффективно выполнять поиск в этом списке, чтобы найти некоего object? Сейчас я просто сделать для loop, который выглядит следующим образом:Как наиболее эффективно искать список объектов?

for(int i = 0; i < theList.Count; i++) 
{ 
    if (theList[i].certainField == whatImLookingFor) 
    { 
    doSomething(); 
    break;//to exit for loop to prevent unnecessary processing 
    } 
} 

Есть более эффективный способ, которым я могу идти об этом? Обычно это одно и тоже поле, и я его тоже сравниваю. Я подумал, может быть, использовать словарь, но я не совсем уверен, должен ли я это делать.

+0

Это остановится на первом найденном вами объекте, это то, что вы хотите ? – fge

+0

Спасибо за комментарий. Да, я всегда ищу только один конкретный объект в Списке. – Daniel

+0

Ну, тогда я не понимаю, как это можно улучшить, создав словарь, если только ваш список объектов _really_ огромный. Я бы отправился за «Картой», если вы действительно искали несколько объектов, но, поскольку вы остановились на первом, вам потребуется больше времени на создание словаря, чем поиск того, как вы сейчас это делаете. – fge

ответ

2

Это зависит от вашего использования.

Если вам нужно выполнить много раз и хотят, чтобы сделать выполнение так быстро, как это возможно, создать словарь:

//save a dictionary somewhere 
var dictionary = theList.ToDictionary(i => i.certainField); 

//execution: 
var item = dictionary[whatImLookingFor]; 
dosomething(); 

Это происходит за счет создания словаря (более длительное время инициализации), но дает более быстрый поиск O (1).

Если вам нужно сделать это только один раз, сохраните свой код как есть (O (n) поиск).

0
theList.First(x => x.certainField.Equals(whatImLookingFor)); //already optimized 

BTW Вы действительно не знаете, как .NET словарь [индекс] Оператор внутренне реализован (например, цикл по массиву или с помощью указателя связанного списка в низком уровне)

Я рекомендую прочитать Extensive Examination of Data Structures Using C# глубокий анализ эффективности структуры данных .NET (Array, Stack, Dictionary, List), хотя он написал несколько лет назад, что он по-прежнему действителен и стоит посмотреть на

Смежные вопросы