На самом деле, Dictionary<,>
часто медленнее , чем линейный поиск, из-за сложностей, связанных с выполнением словарной логики (хэши, сегменты и т. Д.). В моих тестах обрезание (где Dictionary<,>
начинает работать быстрее) часто составляет около 150 элементов. И так как у вас обычно меньше таблиц, чем 150, я был бы рад линейному списку производительности.
(что вовсе не означает "не использовать Dictionary<T>
; это просто означает, что производительность может не быть главной причиной для этого конкретного варианта использования; применение уникального ключа и foo ["bar"] модель может быть)
Частично это связано со сложностью получения хеша - GetHashCode()
для string
, в частности, является относительно дорогим (хотя int.GetHashCode()
ослепительно быстр ;-p).
В действительности, в большинстве небольших наборов данных вы никогда не заметите разницу между ними. Если у вас большие данные, то, очевидно, вам необходимо спланировать это и соответствующим образом кодировать.
Другие различия между Dictionary<,>
и чем-то вроде List<>
заключаются в уникальности: Dictionary<,>
не позволит вам иметь дублирующиеся ключи (хотя Lookup<,>
в .NET 3.5 будет).