I'm trying to wrap my head around which data structures are the most efficient and when / where to use which ones.
Now, it could be that I simply just don't understand the structures well enough, but how is an
ILookup(of key, ...)
Dictionary(of key, list(of ...))
Two significant differences:
Lookupis immutable. Yay :) (At least, I believe the concrete
Lookupclass is immutable, and the
ILookupinterface doesn't provide any mutating members. There could be other mutable implementations, of course.)
KeyNotFoundException. (Hence there's no
They're likely to be equivalent in efficiency - the lookup may well use a
Dictionary<TKey, GroupingImplementation<TValue>> behind the scenes, for example. Choose between them based on your requirements. Personally I find that the lookup is usually a better fit than a
Dictionary<TKey, List<TValue>>, mostly due to the first two points above.
Note that as an implementation detail, the concrete implementation of
IGrouping<,> which is used for the values implements
IList<TValue>, which means that it's efficient to use with