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ループを使用することもできますが、誰かがラムダ式や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

これにより、リストが最初の値から同じ最初の値を持つ2番目の値の合計への辞書マッピングに変わります。

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 に答える