В чем разница между LINQ ToDictionary и ToLookup


Ответы:


177

Словарь представляет собой карту 1: 1 (каждый ключ отображается на одно значение), а словарь является изменяемым (редактируемым) постфактум.

Поиск - это карта 1: многие (мульти-карта; каждый ключ сопоставляется с одним IEnumerable<>из значений с этим ключом), и в ILookup<,>интерфейсе нет изменений.

В качестве побочного примечания вы можете запросить поиск (через индексатор) по несуществующему ключу, и вы получите пустую последовательность. Сделайте то же самое со словарем, и вы получите исключение.

Итак: сколько записей разделяет каждый ключ?

Чрезмерно упрощенный способ смотреть на него в том , что Lookup<TKey,TValue>это примерно сопоставимы с аDictionary<TKey,IEnumerable<TValue>>


5
Также чем-то похож на groupby?
Карло В. Данго

7
Является ли поведение поиска, возвращающим пустую последовательность для отсутствующей ключевой части стандартного контракта, ILookup<,>или реализация, которая может генерировать файл KeyNotFoundException. Реализация в Rx бросает KeyNotFoundException.
Lukazoid

В случае, если это кому-то поможет: Dictionary<TKey, IEnumerable<TValue>>можно описать как словарь списков. Так ToLookup(), как говорят: дайте мне словарь списков. По какой-то причине, когда я услышал об этом так, это помогло мне прочувствовать это в моей голове.
Нейт Кук,

-4

ToDictionary - это <TKey, TValue>, а ToLookup <TKey, T1, T2, T3, ...> аналогичен IGrouping, но перечисление остается в памяти.


3
Не совсем уверен, что вы пытаетесь проиллюстрировать с помощью T1, T2, T3, ...; ToLookup и ToDictionary (сами методы) имеют примерно одинаковый API
Марк Грейвелл
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.