Группы по умолчанию для метода GroupBy linq - PullRequest
0 голосов
/ 09 сентября 2018

Есть ли способ определения групп по умолчанию при использовании метода GroupBy. Используется только тогда, когда для этой группы нет элементов.

Допустим, эту коллекцию [-4, -3, -2, -1, 0] следует разделить на три группы a, b, c, если они отрицательные, нулевые и положительные. И, наконец, каждая группа должна быть засчитана как [4, 1, 0]

myCollection.GroupBy(p=>p<0?"a":p==0?"b":"c").Select(p=>p.Count()).ToArray()

Может ли быть, что группа c также существует без какого-либо элемента.

Подходит и любой другой однострочный linq.

1 Ответ

0 голосов
/ 09 сентября 2018

Вы можете добавить три элемента с известными группировками, а затем выделить их, например:

var counts = myCollection
    .Concat(new[] { int.MinValue, 0, int.MaxValue }) // Add items to force groups
    .GroupBy(p => p<0?"a":p==0?"b":"c")
    .ToDictionary(g => g.Key, g => g.Count()-1);

Примечание g.Count() - 1 выражение, оно отменяет эффект конкатенации с массивом, который вызывает элементы по умолчанию.

В более сложном сценарии, когда вам нужны сами группы, а не просто счетчики, вам нужно будет объединить специальные объекты-заполнители с входными данными, а затем отфильтровать их после выполнения GroupBy.

...