Словарь <string, MyObject> или List <MyObject>с C # 3.5? - PullRequest
8 голосов
/ 29 октября 2008

Я часто использую Словарь в C # 2.0 с первым ключом в качестве строки, содержащей уникальный идентификатор.

Я изучаю C # 3.0 +, и кажется, что теперь я могу просто использовать List и просто сделать LINQ для этого объекта, чтобы получить конкретный объект (с .where ()).

Итак, если я правильно понимаю, класс Dictionary потерял свое предназначение?

Ответы [ 4 ]

13 голосов
/ 29 октября 2008

нет, словарь по-прежнему более эффективен для возврата данных по ключу.

список, который вам еще нужно перебрать, чтобы найти то, что вы хотите. Словарь выполняет поиск.

5 голосов
/ 29 октября 2008

Если у вас есть только список, то выбор LINQ будет сканировать каждый элемент в списке, сравнивая его с тем, который вы ищете.

Словарь, однако, вычисляет хеш-код искомой строки (возвращается методом GetHashCode). Это значение затем используется для более эффективного поиска строки. Для получения дополнительной информации о том, как это работает, см. Википедия .

Если у вас более нескольких строк, начальный метод (List) начнет мучительно медленно работать.

2 голосов
/ 29 октября 2008

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

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

MSDN документы по словарю

http://msdn.microsoft.com/en-us/library/xfhwa508.aspx

и Список

http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx

2 голосов
/ 29 октября 2008

ИМХО, словарный подход будет НАМНОГО быстрее, чем LINQ, поэтому, если у вас есть массив с большим количеством элементов, вам лучше использовать Dictionary.

...