Самый быстрый способ найти элемент в списке?

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

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

Спасибо

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

Ответ 1

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

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


Edit:

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

Ответ 2

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

Ответ 3

Я не уверен, будет ли это полезно для вас, но это будет довольно простой способ сделать это, но не уверен в точной "скорости" его.

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

collection.Sort();

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