Яка різниця між LINQ ToDictionary і ToLookup


Відповіді:


176

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

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

Як бічна примітка, ви можете запитувати пошук (через індексатор) на ключ, який не існує, і ви отримаєте порожню послідовність. Зробіть те саме зі словником, і ви отримаєте виняток.

Отже: скільки записів поділяє кожен ключ?

Надмірно спрощений спосіб дивитися на нього в тому , що Lookup<TKey,TValue>це приблизно порівнянні з аDictionary<TKey,IEnumerable<TValue>>


5
Також дещо схожий на групову?
Карло В. Данго

7
Це поведінка пошуку, який повертає порожню послідовність для відсутньої ключової частини стандартного контракту ILookup<,>або це реалізація, вільна для кидання KeyNotFoundException. Реалізація в Rx кидає KeyNotFoundException.
Луказоїд

У випадку, якщо це комусь допоможе: Dictionary<TKey, IEnumerable<TValue>>його можна описати як словник списків. Так ToLookup(), як сказати: дайте мені словник списків. Чомусь слухаючи це описано, це допомогло мені зрозуміти це прямо в голові.
Нейт Кук

-4

ToDictionary є <TKey, TValue>, а ToLookup <TKey, T1, T2, T3, ...> схожий на IGrouping, але перерахування залишається в пам'яті.


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