对列表进行分组和汇总<object []> </object []>

时间:2012-12-19 22:35:05

标签: c# linq lambda

我有List<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来实现这一点。

2 个答案:

答案 0 :(得分: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 :(得分:1)

这会将您的列表转换为字典映射,从第一个值到具有相同第一个值的第二个值的总和。

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

我错过了声明结果应该是包含List<Object>的{​​{1}}类型的部分。如果贬低者会对原因发表评论,这将有所帮助。 ;)