2009-10-19 4 views
3

Это может быть либо невозможно, либо настолько очевидно, что я продолжаю проходить через него.Возможно группировать по количеству в LINQ?

У меня есть список объектов (скажем, Интс для этого примера):

List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6 }; 

Я хотел бы быть в состоянии группе парами, не обращая внимания на заказ или любого другого сравнения, возвращая новый Объект группировки.

т.е.

list.GroupBy(i => someLogicToProductPairs); 

Там это вполне реальная возможность, я, возможно, приближается эту проблему с неправильным углом, однако, цель состоит в том, чтобы сгруппировать множество объектов постоянной мощности. Любая помощь приветствуется.

+0

Каков результат? Группа, имеющая {1}, другая, имеющая {2}? –

+0

Группировка будет парой, то есть {1,2}, {3,4} и т. Д. –

ответ

5

ли вы имеете в виду, как это:

List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6 }; 

IEnumerable<IGrouping<int,int>> groups = 
    list 
    .Select((n, i) => new { Group = i/2, Value = n }) 
    .GroupBy(g => g.Group, g => g.Value); 

foreach (IGrouping<int, int> group in groups) { 
    Console.WriteLine(String.Join(", ", group.Select(n=>n.ToString()).ToArray())); 
} 

Выход

1, 2 
3, 4 
5, 6 
+1

, если вы не позволите маленьким парням иногда появляться: D –

1

вы можете сделать что-то вроде этого ...

List<int> integers = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 

var p = integers.Select((x, index) => new { Num = index/2, Val = x }) 
       .GroupBy(y => y.Num); 
0
int counter = 0; 
    // this function returns the keys for our groups. 
    Func<int> keyGenerator = 
    () => 
     { 
     int keyValue = counter/2; 
     counter += 1; 
     return keyValue; 
     }; 

    var groups = list.GroupBy(i => {return keyGenerator()}); 
Смежные вопросы