C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のAggregate()メソッドとは?シード値を使った累積処理の基本を解説

C#のAggregate()メソッドは、LINQの機能の一つで、シーケンス(要素の集まり)に対してアキュムレータ関数(累積関数)を順番に適用し、単一の結果を求めるためのメソッドです。合計値の計算や最大・最小の抽出など、さまざまな集計処理に活用できます。

まず、次のような文字列配列を用意します。

string[] arr = { "DemoOne", "DemoTwo", "DemoThree", "DemoFour"};

次に、Aggregate()メソッドを使用します。比較の基準となるシード値として「DemoFive」を設定しています。

string res = arr.AsQueryable().Aggregate("DemoFive", (longest, next) => next.Length > longest.Length ? next : longest, str => str.ToLower());

このコードでは、初期シード値である「DemoFive」よりも文字数が多い文字列が結果として返されます。第1引数にシード値、第2引数に各要素を累積的に評価するラムダ式、第3引数には最終結果に適用するセレクター関数(ここでは小文字への変換)を指定しています。

サンプルコード

using System;
using System.Linq;
class Demo {
    static void Main() {
        string[] arr = { "DemoOne", "DemoTwo", "DemoThree", "DemoFour"};
        string res = arr.AsQueryable().Aggregate("DemoFive",
            (longest, next) => next.Length > longest.Length ? next : longest,
            str => str.ToLower());
        Console.WriteLine("最も文字数の多い文字列: {0}", res);
    }
}

実行結果

最も文字数の多い文字列: demothree

処理の流れ

Aggregate()メソッドは、次の手順で動作します。

  • シード値「DemoFive」を初期の累積値として設定します。
  • 配列の各要素と現在の累積値を比較し、より文字数が多い方を新しい累積値として保持します。
  • すべての要素の処理が完了した後、最終的な値に対してセレクター関数(小文字変換)を適用して結果を返します。

この例では、配列の中で最も文字数が多い「DemoThree」が選択され、小文字に変換された「demothree」が出力されます。

  1. C#のCompareTo()メソッドの使い方を解説

    C#では、2つの値を比較する際にCompareTo()メソッドを使用します。このメソッドは、呼び出し元の値と引数で渡した値を比較し、その大小関係を整数値として返します。CompareTo()メソッドの戻り値CompareTo()メソッドの戻り値は以下の3パターンです。0 = 両方の値が等しい場合1 = 呼び出し元の値が引数の値より大きい場合(第2の数値が小さい)-1 = 呼び出し元の値が引数の値より小さい場合(第1の数値が小さい)CompareTo()メソッドの実装例それでは、C#でCompareTo()メソッドを実装するサンプルコードを見てみましょう。ここでは、同じ値を持つ2つのint型変数

  2. RubyのArray#zipメソッド徹底解説!2つの配列をスマートに結合する方法

    2つの配列を要素ごとに比較して、その違いを見つけたいと思ったことはありませんか? あるいは、各インデックスごとに最大の数値を求めたい、キーのリストと値のリストを組み合わせてハッシュを作りたい――そんな場面にも出会うことがあるでしょう。 …これを「面倒な方法」で実装すると、次のようなコードになります。 例:冗長な書き方 a = [1,2,3,4,5] b = [1,2,3,6,8] c = a.map.with_index { |_, idx| [a[idx], b[idx]] } # [[1, 1], [2, 2], [3, 3], [4, 6], [5, 8]] 確かに動作はしますが