ホームページ >バックエンド開発 >C++ >LINQのGroupBy、合計、カウントを使用して、コレクション内の項目を効率的にグループ化、合計、およびカウントするにはどうすればよいですか。

LINQのGroupBy、合計、カウントを使用して、コレクション内の項目を効率的にグループ化、合計、およびカウントするにはどうすればよいですか。

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-24 16:42:12429ブラウズ

How can I use LINQ's GroupBy, Sum, and Count to efficiently group, sum, and count items in a collection, avoiding common pitfalls?

linq:groupby、sum、およびcount for efficive data aggreation

この記事では、C#プログラミングの一般的な課題について説明します。LINQの

GroupBy、およびSumメソッドを使用して、コレクション内のアイテムの効率的なグループ化、合計、カウント。 実用的な例を調査し、共通の落とし穴を強調し、堅牢なソリューションを提示します。 Count

シナリオ:製品集約

ProductProductCodeのオブジェクトのコレクションを想像してください。目標は、これらの製品をPriceでグループ化し、各コードの合計価格を計算し、各グループの製品の数をカウントすることです。 目的の出力は、各アイテムが製品コード、その総価格、および製品数を表す新しいコレクションです。 NameProductCode初期(欠陥)アプローチ

最初の試みは次のようになるかもしれません:

このコードの問題は、

の使用です。 これにより、グループ化された結果が平らになり、間違った

(常に1)になります。
<code class="language-csharp">List<Product> products = LoadProducts();
List<ResultLine> result = products
    .GroupBy(p => p.ProductCode)
    .SelectMany(group => group.Select(
        p => new ResultLine
        {
            ProductName = p.Name,
            Quantity = group.Count().ToString(),
            Price = group.Sum(p => p.Price).ToString(),
        }))
    .ToList();</code>

正しいソリューションSelectManyQuantity

効率的かつ正確なソリューションは

を回避し、各グループから集約されたデータを直接選択します。 この改訂されたコードは、製品を正しくグループ化します。 各グループの最初の製品から名前を取得します(同じ製品コードの一貫した名前を想定しています)。

各グループの正確なカウントを提供し、

合計価格を計算します。 SelectManyおよび

は、適切な数値タイプ(それぞれintと10進数)であり、データの整合性を改善していることに注意してください。
<code class="language-csharp">List<ResultLine> result = products
    .GroupBy(p => p.ProductCode)
    .Select(group => new ResultLine
    {
        ProductName = group.First().Name, // Assumes all products with the same code have the same name
        Quantity = group.Count(),
        Price = group.Sum(p => p.Price),
    })
    .ToList();</code>

group.First().Nameを排除し、グループプロパティに直接アクセスすることにより、効率的かつ正確なデータ集約を実現し、意図しないデータの平坦化の一般的な落とし穴を回避します。 このアプローチにより、結果のコレクションが、元の製品コレクションからのグループ化、合計、およびカウントされたデータを正確に反映することが保証されます。

以上がLINQのGroupBy、合計、カウントを使用して、コレクション内の項目を効率的にグループ化、合計、およびカウントするにはどうすればよいですか。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。