Самый быстрый способ найти элемент в списке? - PullRequest
13 голосов
/ 16 января 2010

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

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

Спасибо

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

Ответы [ 3 ]

22 голосов
/ 16 января 2010

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

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


Edit:

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

2 голосов
/ 16 января 2010

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

0 голосов
/ 16 января 2010

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

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

collection.Sort();

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