7

我有这个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 来完成此操作。

4

2 回答 2

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();
于 2012-12-19T22:45:10.033 回答
1

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

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

我错过了说明结果应该是包含类型List<Object>的部分Object[]。如果反对者对原因发表评论会有所帮助。;)

于 2012-12-19T22:50:20.187 回答