LINQ ToDictionary和ToLookup有什么区别

Car*_*ngo 116 c# linq

LINQ ToDictionary和ToLookup有什么区别?他们似乎做同样的事情.

Mar*_*ell 164

字典是1:1映射(每个键映射到单个值),字典在事实之后是可变的(可编辑的).

查找是1:多映射(多映射;每个键映射到IEnumerable<>具有该键的值的一个),并且ILookup<,>接口上没有变异.

作为旁注,您可以在不存在的键上查询(通过索引器)查找,并且您将获得一个空序列.对字典做同样的事情,你会得到一个例外.

那么:每个密钥共享多少条记录?

看它的过于简化的方式是,一个Lookup<TKey,TValue>大致相当Dictionary<TKey,IEnumerable<TValue>>

  • 查找的行为是否为"ILookup <,>"标准契约的缺失键部分返回一个空序列,或者是一个可以自由抛出`KeyNotFoundException`的实现.[在Rx中实现](https://github.com/Reactive-Extensions/Rx.NET/blob/fcf00a1d0c95672934609b6a2dbb4b93fca55428/Rx.NET/Source/System.Reactive.Linq/Reactive/Internal/Lookup.cs#L38)抛出一个`KeyNotFoundException`. (6认同)
  • 还有点类似于groupby? (5认同)