Carlo V. Dango
Carlo V. Dango

Reputation: 13832

What is the difference between LINQ ToDictionary and ToLookup

What is the difference between LINQ ToDictionary and ToLookup? They seem to do the same thing.

Upvotes: 163

Views: 27179

Answers (2)

Bonshington
Bonshington

Reputation: 4032

ToDictionary is <TKey, TValue> while ToLookup<TKey, T1, T2, T3, ...> is is similar to IGrouping but enumeration stays in memory.

Upvotes: -6

Marc Gravell
Marc Gravell

Reputation: 1062855

A dictionary is a 1:1 map (each key is mapped to a single value), and a dictionary is mutable (editable) after the fact.

A lookup is a 1:many map (multi-map; each key is mapped to an IEnumerable<> of the values with that key), and there is no mutate on the ILookup<,> interface.

As a side note, you can query a lookup (via the indexer) on a key that doesn't exist, and you'll get an empty sequence. Do the same with a dictionary and you'll get an exception.

So: how many records share each key?

An overly simplified way of looking at it is that a Lookup<TKey,TValue> is roughly comparable to a Dictionary<TKey,IEnumerable<TValue>>

Upvotes: 238

Related Questions