Выбор ответа Senior Коллекции и LINQ обновлено

GroupBy против ToLookup

Вопрос

Чем ToLookup отличается от GroupBy в LINQ to Objects?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: ToLookup сразу строит индекс по ключу, а GroupBy отложен. ToLookup материализует данные сразу в структуру «ключ → набор значений» с быстрым доступом по индексатору; по отсутствующему ключу он возвращает пустую последовательность.

Варианты ответа

  1. GroupBy сохраняет порядок групп, а ToLookup сортирует ключи
  2. ToLookup бросает исключение при повторах ключей, как ToDictionary
  3. Разницы нет: это синонимы, ToLookup просто вызывает GroupBy
  4. ToLookup сразу строит индекс по ключу, а GroupBy отложенправильный ответ

Разбор

ToLookup материализует данные сразу в структуру «ключ → набор значений» с быстрым доступом по индексатору; по отсутствующему ключу он возвращает пустую последовательность. GroupBy отложен и пересчитывается при каждом перечислении. Порядок групп у обоих по первому появлению ключа, сортировки нет. Повторяющиеся ключи это суть обоих методов, исключение бросает только ToDictionary.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.