В чем разница между 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, но перечисление остается в памяти.