LINQ ToDictionary和ToLookup有什么区别


123

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

Answers:


176

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

查找是1:许多映射(多映射;每个键都映射到IEnumerable<>具有该键的值),并且ILookup<,>接口上没有任何突变。

附带说明一下,您可以查询(通过索引器)在不存在的键上的查询,并且会得到一个空序列。用字典做同样的事情,你会得到一个例外。

那么:每个键共享多少记录?

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


5
还有点像groupby吗?
Carlo V. Dango

7
查找的行为是返回标准合同中缺少的关键部分的空序列的行为,ILookup<,>还是可以随意抛出的实现KeyNotFoundExceptionRx中实现抛出一个KeyNotFoundException
Lukazoid 2015年

万一它对任何人Dictionary<TKey, IEnumerable<TValue>>都有帮助:可以说是一个列表字典。所以ToLookup()就像在说:给我一个字典清单。出于某种原因,听到它描述的方式可以帮助我直截了当地。
Nate Cook

-4

ToDictionary是<TKey,TValue>,而ToLookup <TKey,T1,T2,T3,...>与IGrouping类似,但枚举保留在内存中。


3
不太确定您要用什么来说明T1, T2, T3, ...; ToLookup和ToDictionary(方法本身)具有几乎相同的API
Marc Gravell
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.