2012-12-19 30 views
7

我有這個List<object[]>集團和點心列表<object[]>

List<object[]> olst = new List<object[]>(); 

olst.Add(new object[] { "AA1", 1 }); 
olst.Add(new object[] { "AA2", 1 }); 
olst.Add(new object[] { "AA2", 1 }); 
olst.Add(new object[] { "AA1", 1 }); 
olst.Add(new object[] { "AA1", 1 }); 

olst,我需要產生一個新的List<object>持有這樣的:

"AA1", 3 
"AA2", 2 

換句話說,我需要組olst [x] [0]並總結olst [x] [1]
我可以使用for循環,但我希望有人可以幫助我使用lambda表達式和/或linq來完成此操作。

+1

您可能想考慮使用'Tuple '而不是對象數組。或者編寫自己的類來處理這些值。這樣你就可以擁有強大的打字功能,並且不需要進行演員表演。 – juharr

回答

6

使用GroupBySelect

List<object[]> newList = olst 
    /* Group the list by the element at position 0 in each item */ 
    .GroupBy(o => o[0].ToString()) 
    /* Project the created grouping into a new object[]: */ 
    .Select(i => new object[] 
    { 
     i.Key, 
     i.Sum(x => (int)x[1]) 
    }) 
    .ToList(); 
1

這將打開你列出到從第一值到第二值具有相同第一值之和的字典映射。

var result = olst.GroupBy(entry => (String)entry[0]) 
       .Select(group => new Object[] 
            { 
             group.Key, 
             group.Sum(item => (Int32)item[1]) 
            }) 
       .ToList(); 

我錯過了部分陳述的結果應該是包含Object[]類型List<Object>的。如果downvoters會留下評論的原因,這將有所幫助。 ;)