J'ai eu du mal à articuler les différences entre ILookup<TKey, TVal>
et IGrouping<TKey, TVal>
, et je suis curieux de savoir si je comprends bien maintenant. LINQ aggravé le problème en produisant des séquences d' IGrouping
d'articles tout en me donnant également un ToLookup
méthode d'extension. Donc, c'était comme s'ils étaient les mêmes jusqu'à ce que j'ai regardé de plus près.
var q1 =
from n in N
group n by n.MyKey into g
select g;
// q1 is IEnumerable<IGrouping<TKey, TVal>>
Ce qui est équivalent à:
var q2 = N.GroupBy(n => n.MyKey, n => n);
// q2 is IEnumerable<IGrouping<TKey, TVal>>
Qui ressemble beaucoup:
var q3 = N.ToLookup(n => n.MyKey, n => n);
// q3 is ILookup<TKey, TVal>
Suis-je la corriger dans la suite des analogies?
- Un
IGrouping<TKey, TVal>
est un groupe unique (c'est à dire un incrustée de séquence), analogue à l'KeyValuePair<TKey, TVal>
où la valeur est en fait une séquence d'éléments (plutôt qu'un seul élément) - Un
IEnumerable<IGrouping<TKey, TVal>>
est une séquence de ceux (similaire à ce que vous obtenez lors de l'itération sur unIDictionary<TKey, TVal>
- Un
ILookup<TKey, TVal>
est plus de l'IDictionary<TKey, TVal>
où la valeur est en fait une séquence d'éléments