C#のGroupBy()メソッドとは?要素をグループ化する使い方を解説
GroupBy()メソッドとは
C#のGroupBy()は、System.Linq名前空間に用意されている拡張メソッドの一つです。指定したキー値に基づいてコレクション内の要素をグループ化し、その結果をIEnumerable<IGrouping<TKey, TElement>>として返します。
各グループにはKeyプロパティが割り当てられ、同じキーを持つ要素がひとつのまとまりとして扱われます。
サンプルコード
まず、次のような整数型の配列を用意します。
int[] arr = { 2, 30, 45, 60, 70 };この配列に対してGroupBy()を使い、「50以下の要素」と「51以上の要素」の2つのグループに分類してみましょう。キーの判定には、数値が50以下かどうかを返すchkSmaller()メソッドを使用します。
arr.GroupBy(b => chkSmaller(b));
chkSmaller()は、引数として受け取った値が50以下であればtrue、そうでなければfalseを返すメソッドです。この戻り値がグループ化のキーになります。
それでは、完全なコードを見てみましょう。
例
using System;
using System.Linq;
class Demo {
static void Main() {
int[] arr = { 2, 30, 45, 60, 70 };
var check = arr.GroupBy(b => chkSmaller(b));
foreach (var val in check) {
Console.WriteLine(val.Key);
foreach (var res in val) {
Console.WriteLine(res);
}
}
}
static bool chkSmaller(int a) {
return a <= 50;
}
}実行結果
True 2 30 45 False 60 70
コードの解説
実行結果から、要素が2つのグループに分けられていることがわかります。
- KeyがTrueのグループ: 50以下の要素(2、30、45)
- KeyがFalseのグループ: 51以上の要素(60、70)
外側のforeachループで各グループ(IGrouping)を取り出し、val.Keyでグループのキー値を表示しています。続く内側のforeachループで、そのグループに属する各要素を出力しています。
このようにGroupBy()メソッドを使うことで、条件に応じた柔軟なデータの分類処理を簡潔に記述できます。
-
C#のCompareTo()メソッドの使い方を解説
C#では、2つの値を比較する際にCompareTo()メソッドを使用します。このメソッドは、呼び出し元の値と引数で渡した値を比較し、その大小関係を整数値として返します。CompareTo()メソッドの戻り値CompareTo()メソッドの戻り値は以下の3パターンです。0 = 両方の値が等しい場合1 = 呼び出し元の値が引数の値より大きい場合(第2の数値が小さい)-1 = 呼び出し元の値が引数の値より小さい場合(第1の数値が小さい)CompareTo()メソッドの実装例それでは、C#でCompareTo()メソッドを実装するサンプルコードを見てみましょう。ここでは、同じ値を持つ2つのint型変数
-
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]] 確かに動作はしますが