2009-10-19 8 views
3

這可能是不可能的,或者如此顯而易見,我一直忽略它。可能由LINQ中的Count進行分組?

我有對象的列表(讓我們說這個例子整數):

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

我希望能集團通過對完全不考慮訂購或任何其他的比較,返回一個新IGrouping對象。

list.GroupBy(i => someLogicToProductPairs); 

有非常現實的可能性我可能接近從錯誤的角度來看這一問題,但是,我們的目標是通過組恆定容量的一組對象。任何幫助是極大的讚賞。

+0

結果是什麼?一個{1},另一個{2}的分組? – 2009-10-19 16:15:27

+0

分組是一對,即{1,2},{3,4}等 – 2009-10-19 16:41:12

回答

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 – 2009-10-19 16:24:59

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