Словарь < string, MyObject > или список < MyObject > с C # 3.5?
-
05-07-2019 - |
Вопрос
Я часто использую Dictionary в C # 2.0 с первым ключом в качестве строки, содержащей уникальный идентификатор.
Я изучаю C # 3.0 +, и кажется, что теперь я могу просто использовать List и просто делать LINQ для этого объекта, чтобы получить конкретный объект (с .where ()).
Итак, если я правильно понимаю, класс Dictionary потерял свое предназначение?
Решение
нет, словарь по-прежнему более эффективен для возврата вещей при наличии ключа.
список, вам все еще нужно перебирать список, чтобы найти то, что вы хотите. Словарь выполняет поиск.
Другие советы
Если у вас просто есть список, то выбор LINQ будет сканировать каждый элемент в списке, сравнивая его с тем, который вы ищете.
Словарь, однако, вычисляет хеш-код искомой строки (возвращается методом GetHashCode). Это значение затем используется для более эффективного поиска строки. Подробнее о том, как это работает, см. В Википедии .
Если у вас более нескольких строк, начальный метод (List) начнет мучительно медленно работать.
ИМХО, словарный подход будет НАМНОГО быстрее, чем LINQ, поэтому, если у вас есть массив с большим количеством элементов, вам лучше использовать Dictionary.
Словарь реализован как хеш-таблица. Таким образом, он должен предоставлять постоянный доступ для поиска. Список реализован в виде динамического массива, предоставляя вам линейный доступ по времени. Р>
Основываясь на базовых структурах данных, словарь по-прежнему должен обеспечивать более высокую производительность.
Документы MSDN в словаре
http://msdn.microsoft.com/en-us/library /xfhwa508.aspx р>
и список