ILookup <TKey, TVal> vs. IGrouping <TKey, TVal>
Eu tenho tido problemas para articular as diferenças entreILookup<TKey, TVal>
eIGrouping<TKey, TVal>
e estou curioso se entendi corretamente agora. O LINQ agravou a questão produzindo sequências deIGrouping
itens, enquanto também me dando umToLookup
método de extensão. Então parecia que eles eram os mesmos até que eu olhei mais de perto.
var q1 =
from n in N
group n by n.MyKey into g
select g;
// q1 is IEnumerable<IGrouping<TKey, TVal>>
Qual é equivalente a:
var q2 = N.GroupBy(n => n.MyKey, n => n);
// q2 is IEnumerable<IGrouping<TKey, TVal>>
Que parece muito com:
var q3 = N.ToLookup(n => n.MyKey, n => n);
// q3 is ILookup<TKey, TVal>
Estou correto nas seguintes analogias?
AIGrouping<TKey, TVal>
é um grupo único (isto é, uma sequência codificada), análogo aKeyValuePair<TKey, TVal>
onde o valor é, na verdade, uma sequência de elementos (em vez de um único elemento)AIEnumerable<IGrouping<TKey, TVal>>
é uma seqüência dessas (semelhante ao que você obtém ao iterar sobre umIDictionary<TKey, TVal>
AILookup<TKey, TVal>
é mais como umIDictionary<TKey, TVal>
onde o valor é na verdade uma sequência de elementos