ILookup <TKey, TVal> против IGrouping <TKey, TVal>
у нас были проблемы с выражением различий междуILookup
а такжеIGrouping
и мне любопытно, правильно ли я сейчас понимаю. LINQ усугубил проблему, производя последовательностиIGrouping
предметы, а также дает мнеToLookup
метод расширения. Мне казалось, что они были одинаковыми, пока я не посмотрел поближе.
var q1 =
from n in N
group n by n.MyKey into g
select g;
// q1 is IEnumerable
Что эквивалентно:
var q2 = N.GroupBy(n => n.MyKey, n => n);
// q2 is IEnumerable
Который выглядит очень похоже на:
var q3 = N.ToLookup(n => n.MyKey, n => n);
// q3 is ILookup
Я прав в следующих аналогиях?
IGrouping
является единственной группой (то есть последовательностью с ключом), аналогичнойKeyValuePair
где значение на самом деле представляет собой последовательность элементов (а не один элемент)IEnumerable
это последовательность из них (аналогично тому, что вы получаете при перебореIDictionary
ILookup
больше похоже наIDictionary
где значение на самом деле является последовательностью элементов