2

私はC#のリストを持っています例えば

A,1
B,2
C,3
A,4
B,5

結果を次のようにリストに返したい:

A,5
B,7
C,3

したがって、最初の列でグループ化し、2番目の列を合計します。

どうすればよいですか?LINQを使用して満足しています。これまでの宣言とコードは次のとおりです。

class Program
{
    static void Main(string[] args)
    {
        List<MyList> list = new List<MyList>();

        list.Add(new MyList() { Letter = "A", Value = 1 });
        list.Add(new MyList() { Letter = "B", Value = 2 });
        etc... 
    }
}

class MyList
{
    public string Letter { get; set; }
    public long Value { get; set; }
}
4

2 に答える 2

4

あなたが望むように聞こえます:

var results = list.GroupBy(x => x.Letter, x => x.Value)
                  .Select(g => new { Letter = g.Key, Sum = g.Sum() });

(タイプが何であるかは明確ではありませんが、うまくいけば、これから必要なリストを取得できます。)

オーバーロードがありGroupBy、1回の呼び出しでこれらすべてを実行できますが、個人的には上記のバージョンの方が簡単だと思います。

于 2012-09-17T16:52:51.807 に答える
3
var results = data.GroupBy(item => item.Letter)
.Select(group => new
{
  Letter = group.Key,
  Count = group.Sum(item => item.Value),
});

Letter「A」、「B」、「C」などを与えるプロパティとValue、1、2、3などを与えるプロパティに置き換えるだけです。A,1が文字列であり、2つのプロパティを持つクラスではない場合は、次のようになります。その文字列を解析する必要があります。

于 2012-09-17T16:53:05.440 に答える