Подтвердить что ты не робот

Поиск по сравнению с группой

Мне интересно, какая разница между groupBy и методом расширения ToLookup.

Давайте представим список таких объектов:

public class Person
{
    public uint Id { get; set; }
    public string Name { get; set; }
    public DateTime Birthday { get; set; }
}


List<Person> People { get; set; }

Теперь я могу использовать вышеописанные методы расширения:

var groupedPeople = People.GroupBy((x) => x.Id);

var lookupPeople = People.ToLookup((x) => x.Id);

Какая разница между этими утверждениями?

Спасибо заранее.

Марко Б.

4b9b3361

Ответ 1

ToLookup использует немедленное выполнение и возвращает ILookup, который позволяет вам просматривать группы вверх по ключу.

GroupBy использует отложенное выполнение и просто возвращает группы в порядке, в котором каждая группа была впервые встречена (так, например, первая группа будет содержать первый элемент исходных данных), не имея представления о возможности для просмотра групп позже ключом. Каждый раз, когда вы перебираете результаты, он снова должен группироваться.

В основном, что вы должны использовать, зависит от того, что вы собираетесь делать с результатами. Если вы просто собираетесь перебирать их за один раз (например, для дальнейшей трансформации), GroupBy обычно отлично. Если вы хотите сохранить их в виде коллекции для нескольких операций, полезен непосредственный характер ToLookup.

Ответ 2

  • ToLookup буферизуется. groupBy выполняет итерацию групп.
  • groupBy использует отмененное выполнение, в то время как ToLookup использует немедленное.