2014-01-27 2 views
4

С точки зрения скорости в поиске, лучше ли искать ключи словаря или значения списка?C# - Поиск ключей словаря и значений поиска в списке

Иными словами, какой из них был бы наиболее предпочтительным?

Dictionary<tring,string> dic = new Dictionary<string,string>(); 
if(dic.ContainsKey("needle")){ ... } 

Или

List<string> list = new List<string>(); 
if(list.Contains("needle")){ ... } 
+0

В общем случае словарь обеспечит более быстрое время поиска. Однако это также зависит от размера данных и шаблонов использования. Чтобы точно сказать, вам нужно будет подробно остановиться на этих фронтах. –

+0

словарь is o (1), тогда как список o (n) работает – sjkm

ответ

6

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

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

Если у вас есть только, у вас есть ключевые пункты (не сопоставляя ключи со значениями), вы также можете попробовать HashSet. Он имеет преимущество O (1) поиска без накладных расходов на стороне словаря Value.

(Предоставленный накладные расходы, вероятно, минимальный, но зачем, если вам это не нужно?)

4

Для поиска в словарь, как правило, лучше, потому что время, необходимое остается постоянным. Со списком он увеличивает размер списка.

Смотрите также: http://www.dotnetperls.com/dictionary-time

2

Я предлагаю использовать Dictionary, когда число выборок значительно превышает количество вставок. Хорошо использовать List, когда у вас всегда будет меньше четырех предметов.

Для поиска Словарь обычно является лучшим выбором. Требуемое время является плоским, O (1) постоянной временной сложностью. Список имеет линейную временную сложность O (N). Три элемента можно зацикливать быстрее, чем искать в словаре.

+0

Итак, для пяти предметов используйте словарь? Кажется довольно произвольным ... –

+0

Он основан на чьих-то тестах скорости. [Источник] (http://www.dotnetperls.com/dictionary-time) –

+0

@ DStanley Да, но OP задает вопрос о скорости поиска, и если он основан на поиске, то словарь более предпочтителен даже с 5 элементами. Если его сценарий не заботится о заказе, я бы использовал HashSet, даже если это всего 5 предметов. –

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