2010-01-16 5 views
11

У меня есть несортированный список строк. Я могу разместить эти элементы в массиве, List, SortedList, что угодно.Самый быстрый способ найти товар в списке?

Мне нужно найти самый быстрый способ поиска строки в этом списке. Мне лучше сбросить список в массив, отсортировать его, а затем реализовать бинарный поиск? Или эта схема обеспечивает способ сделать это?

P.S. Использование VS2008 против .NET 2.0

ответ

20

Если ваша цель - сделать это очень быстро, чтобы найти строки в коллекции, поместите их в HashSet.

HashSet.Contains - метод O (1), а строки имеют хороший алгоритм хеширования по умолчанию, поэтому будет сложнее выполнить более быструю процедуру, чем это.


Edit:

Поскольку вы используете .NET 2, я бы просто сделать Dictionary<string,string> и использовать ту же строку для ключа и значения. Dictinoary<TKey,TValue>.Contains также O (1), и будет намного быстрее, чем любой поиск на основе списка, который вы пытаетесь выполнить.

+0

Прошу прощения - я обновил теги. Я использую VS2008 с .NET 2.0 - HashSets недоступны. – AngryHacker

+0

Так что используйте «Hashtable» –

+0

. Имеет ли .Net действительно не эквивалент HashSet? –

2

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

-1

Я не уверен, будет ли это любое использование для вас, но это было бы довольно простым способом сделать это, не уверенный в точной «скорости» его, хотя.

List<string> collection = new List<string>(); 

collection.Sort(); 

foreach(string value in collection) 
{ 
    if(value == "stringToLookFor") 
    { 
     return value; 
    } 
{ 
+2

Если вы все равно прогоните его, зачем это сортировать? – AngryHacker

+0

Это, вероятно, самый медленный способ поиска в списке. Если вы его отсортировали, вы можете сделать BinarySearch, который будет намного быстрее, но все же медленнее, чем поиск в коллекции на основе ключа/ценности. –

+2

Я только предполагал, что поиск будет быстрее, чем поиск в случайном порядке, особенно если он находится в начале списка. Это было всего лишь предложение и далеко не единственное решение. –