2009-10-19 27 views
3

Cela peut être impossible ou si évident que je continue de le dépasser.Possibilité de regrouper par compte dans LINQ?

J'ai une liste d'objets (disons ints pour cet exemple):

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

Je voudrais être en mesure de regrouper par paires sans égard à l'ordre ou de toute autre comparaison, le retour d'une nouvelle Objet IGrouping.

-à-dire,

list.GroupBy(i => someLogicToProductPairs); 

Il y a la possibilité très réelle que je peux être aborder ce problème du mauvais angle, cependant, l'objectif est de regrouper un ensemble d'objets par une capacité constante. Toute aide est grandement appréciée.

+0

Quel est le résultat? Un groupe qui a {1}, un autre qui a {2}? –

+0

Regroupement serait une paire, à savoir {1,2}, {3,4}, etc –

Répondre

5

Voulez-vous dire comme ceci:

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())); 
} 

Sortie

1, 2 
3, 4 
5, 6 
+1

vous ne pouvez pas laisser les petits gars en obtenir parfois: D –

1

vous pouvez faire quelque chose comme ça ...

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()}); 
Questions connexes