2011-04-14 87 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