2011-04-14 83 views

回答

140

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

查找是一个1:多的映射(多个映射;每个键映射到具有该键的值的IEnumerable<>),并且在接口上没有变化。作为一个方面说明,您可以查询(通过索引器)不存在的关键字,您将得到一个空序列。对字典做同样的事情,你会得到一个异常。

因此:多少条记录共享每个关键字?

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

+4

也有点类似于groupby? – 2011-04-14 05:53:57

+1

确实有点。 – 2011-04-14 05:58:15

+19

@Carlo:是的,与GroupBy非常相似 - 除了GroupBy是懒惰的,而ToLookup是渴望的。有关可能的实现,请参阅http://msmvps.com/blogs/jon_skeet/archive/2011/01/01/reimplementing-linq-to-objects-part-21-groupby.aspx。 – 2011-04-14 05:58:52

-4

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

+2

不太清楚你想用'T1,T2,T3,...'来说明什么; ToLookup和ToDictionary(方法本身)具有几乎相同的API – 2011-04-14 06:00:19