9

私はリストを持っていますList<Field>。この Field クラスには、他のフィールドの中にコードと値のプロパティが含まれており、同じコードのすべての値を合計するために linq を使用できるようにしたいと考えています。

リストをループして、次のコードを使用してこれを辞書に追加できることはわかっていますが、これを行うためのよりクリーンな方法が必要であると確信しています。

if (totals.ContainsKey(code))
{
  totals[code] += value;
}
else
{
  totals.Add(code, value);
}

何か案は?

私は似たようなものを見つけましたが、これは私が持っているものではない list> に適用されました:

var result = Sales.SelectMany(d => d) // Flatten the list of dictionaries
             .GroupBy(kvp => kvp.Key, kvp => kvp.Value) // Group the products
             .ToDictionary(g => g.Key, g => g.Sum());

この記事より [Linq を使用した合計額<List<Dictionary<string, int>>] <List<Dictionary<string, int>> で Linq を使用した合計額

何か案は?コードをいつでも変更できますがDictionary<string, Field>、リストと linq を使用してこれを行う方法が必要であると確信しています。

ありがとう。

私はリストを持っていますList<Field>。この Field クラスには、他のフィールドの中にコードと値のプロパティが含まれており、同じコードのすべての値を合計するために linq を使用できるようにしたいと考えています。

リストをループして、次のコードを使用してこれを辞書に追加できることはわかっていますが、これを行うためのよりクリーンな方法が必要であると確信しています。

if (totals.ContainsKey(code))
{
  totals[code] += value;
}
else
{
  totals.Add(code, value);
}

何か案は?

私は似たようなものを見つけましたが、これは私が持っているものではない list> に適用されました:

var result = Sales.SelectMany(d => d) // Flatten the list of dictionaries
             .GroupBy(kvp => kvp.Key, kvp => kvp.Value) // Group the products
             .ToDictionary(g => g.Key, g => g.Sum());

この記事より [Linq を使用した合計額<List<Dictionary<string, int>>] <List<Dictionary<string, int>> で Linq を使用した合計額

何か案は?コードをいつでも変更できますがDictionary<string, Field>、リストと linq を使用してこれを行う方法が必要であると確信しています。

ありがとう。

アップデート:

申し訳ありませんが、上記に関して重要なセクションを省略したと思います。リストは別のリストに含まれています。つまり、List> myitemList; これには、さらにフィルタリングが必要な可能性のある他の無関係なフィールドが含まれます。わからない???

注: 申し訳ありませんが、書式設定が再び台無しになります!

これに少しコンテキストを与えるには:

Item1 (リスト型)

項目名 値

(項目 1) タイプ 1 (項目 2) 説明 テスト (項目 3) コード A (項目 4) 正味 100.00

Item2 (リスト型)

項目名 値

(項目 1) タイプ 2 (項目 2) 説明 Test1 (項目 3) コード B (項目 4) 正味 95.55

Item3 (リスト型)

項目名 値

(項目 1) タイプ 2 (項目 2) 説明 テスト 2 (項目 3) コード A (項目 4) 正味 35.95

ご覧のとおり、リスト型の各リストには 4 つのフィールド エントリが含まれており、フィールドは名前 (文字列) と値 (オブジェクト) で定義されています。

次に、これらの各リストがメイン リストに追加されます。したがって、メインリストをループする必要があり、各リストの「コード」と「ネット」の合計を含む辞書を作成したいと考えています。だから最後に、私はただ終わるべきです

A、135.95 B、95.55

上記が意味をなすかどうかはわかりません。そうなることを願っています!

アップデート

私がリストを扱っているという事実は、実際には一度に1つのリストを合計したかったので、実際には違いはありませんでした。答えを提供してください。ありがとうございました!

4

3 に答える 3

4
var list = new List<Field>
{
    new Field { Code = "A", Value = 10 },
    new Field { Code = "A", Value = 20 },
    new Field { Code = "B", Value = 30 },
};

var dic = list
    .GroupBy(z => z.Code)
    .ToDictionary(z => z.Key, z => z.Sum(f => f.Value));
于 2013-11-05T17:51:20.183 に答える