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