Самый быстрый поиск по словарю в c # .net Compact Framework 3.5 - PullRequest
3 голосов
/ 12 апреля 2011

Я ищу самый быстрый способ поиска, если List, Set, Dictionary содержит определенное ключевое слово (строку).Мне не нужно хранить какие-либо данные внутри, я просто хочу знать, есть ли мое ключевое слово в списке.

Я думал о некоторых возможностях, таких как:

Dictionary<string, bool> myDictionary = new Dictionary<string, bool>();
if (myDictionary.ContainsKey(valueToSearch))
{
    // do something
}

, но я ненужно значение.

string[] myArray = {"key1", "key2", "key3"}
if (Array.IndexOf(myArray, valueToSearch) != -1)
{
    // do something
}

Тогда я нашел:

List<string> list = new List<string>();
if (list.Contains(valueToSearch))    
{
    // do something
}

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

Ответы [ 3 ]

8 голосов
/ 12 апреля 2011

Из стандартных типов коллекций Dictionary будет самым быстрым, так как я не думаю, что у вас есть HashSet<T> в компактной структуре.Два других выполняют последовательный поиск.

2 голосов
/ 12 апреля 2011

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

в некоторых случаях поиск по списку выполняется быстрее, в зависимости от того, как сортируются данные и что именно вы ищете.

Лучший способ определить это - запустить профиль каждого случая и посмотреть, какойработает лучше.

0 голосов
/ 12 апреля 2011

Я согласен с Энди.Вы также можете посмотреть на SortedList. По сути, это словарь, отсортированный по ключам.Должен ускорить поиск, если он уже отсортирован ...

...