Mam problemy z wyartykułowaniem różnic między ILookup<TKey, TVal>
i IGrouping<TKey, TVal>
, i jestem ciekawy, czy rozumiem teraz poprawnie. LINQ pomógł rozwiązać ten problem, tworząc sekwencje elementów IGrouping
, a także podając metodę rozszerzenia ToLookup
. Czułem się, jakby były takie same, dopóki nie przyjrzałem się dokładniej.ILookup <TKey, TVal> Przeciw IGrouping
var q1 =
from n in N
group n by n.MyKey into g
select g;
// q1 is IEnumerable<IGrouping<TKey, TVal>>
co jest równoważne:
var q2 = N.GroupBy(n => n.MyKey, n => n);
// q2 is IEnumerable<IGrouping<TKey, TVal>>
który wygląda trochę jak:
var q3 = N.ToLookup(n => n.MyKey, n => n);
// q3 is ILookup<TKey, TVal>
Am I poprawić w następujących analogii?
IGrouping<TKey, TVal>
jest jedna grupa (tj Kluczowany sekwencji), analogicznie doKeyValuePair<TKey, TVal>
, gdy wartość ta jest ciągiem elementów (raczej niż pojedynczy element)IEnumerable<IGrouping<TKey, TVal>>
jest sekwencją tych (podobny do tego, co można uzyskać podczas iteracji nadIDictionary<TKey, TVal>
ILookup<TKey, TVal>
jest bardziej jakIDictionary<TKey, TVal>
gdzie wartość jest faktycznie ciągiem elementów
Dzięki za odpowiedź. Nie natknąłem się na Linq pod względem push/pull. Kiedy poszedłem do Google, natknąłem się na jeden z twoich blogów, więc sprawdzę to. Brzmi jak ciekawy sposób na przemyślenie tego. – mckamey
Nadal uważam, że te różnice nie uzasadniają 2 różnych interfejsów. Myślę, że projektant Biblioteki powinien zdecydować się na jeden interfejs.Może tylko osobisty gust, który tutaj jest czymś mało wyraźnym. – rudimenter
Czy to ja, czy jest jakiś błąd z GroupBy vs GroupJoin? Są one tylko _związane konceptualnie. Być może jest to tylko literówka w odpowiedzi. – sehe