как использовать linq в списке <T>для создания спискав C # - PullRequest
1 голос
/ 18 августа 2010

Я видел примеры обратного вопроса, но они не помогают мне в этом направлении.

У меня есть список, где T имеет вес int. Я хотел бы разделить это на списки по 5 сгруппированных по весу.
если у меня есть следующие T с соответствующими весами
A: 1
B: 2
C: 3
D: 4
E: 5
F: 6
G: 7
H: 8
I: 9
J: -11
Я хочу, чтобы {A, B, C, D, E, F, G, H, I, J} были отсортированы по {{J, A, B, C, D}, {E, F, G, H, I }}
Меня не волнуют случаи, когда количество элементов в списке не делится на 5. И я не беспокоюсь о сортировке внутренних списков. Например, я был бы счастлив с {{J, A, B, C, D}, {F, I, G, H, E}} или даже {{F, I, G, H, E}, {J , A, B, C, D}}

1 Ответ

3 голосов
/ 18 августа 2010
var query = data.OrderBy(x => x.Weight)
                .Select((x, i) => new { Value = x, Group = i / 5 })
                .GroupBy(x => x.Group, x => x.Value, (k, g) => g.ToList())
                .ToList();

Если вы довольны тем, что query набирается просто IEnumerable<IEnumerable<T>> вместо List<List<T>>, тогда вы можете вообще пропустить ToList:

var query = data.OrderBy(x => x.Weight)
                .Select((x, i) => new { Value = x, Group = i / 5 })
                .GroupBy(x => x.Group, x => x.Value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...