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

В чем разница между LINQ ToDictionary и ToLookup? Кажется, они делают то же самое.

Ответ 1

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

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

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

Итак: сколько записей делится каждой клавишей?

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

Ответ 2

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