データのグループ化
グループ化とは、共通の属性を共有する要素がそれぞれのグループを形成するように、データをいくつかのグループに分ける操作です。
次の図は、文字のシーケンスをグループ化した結果を示しています。各グループのキーは文字です。
次のセクションに、データ要素をグループ化する標準クエリ演算子のメソッドの一覧を示します。
メソッド
メソッド名 |
Description |
C# のクエリ式の構文 |
Visual Basic のクエリ式の構文 |
詳細情報 |
---|---|---|---|---|
GroupBy |
共通の属性を共有する要素をグループ化します。各グループは IGrouping<TKey, TElement> オブジェクトで表されます。 |
group … by または group … by … into … |
Group … By … Into … |
|
ToLookup |
キー セレクター関数に基づいて、要素を Lookup<TKey, TElement> (一対多のディクショナリ) に挿入します。 |
該当なし |
該当なし |
クエリ式の構文の例
次のコード例では、C# の group by 句または Visual Basic の Group By 句を使用して、偶数か奇数によってリスト内の整数をグループ化します。
Dim numbers As New System.Collections.Generic.List(Of Integer)(
New Integer() {35, 44, 200, 84, 3987, 4, 199, 329, 446, 208})
Dim query = From number In numbers
Group By Remainder = (number Mod 2) Into Group
Dim sb As New System.Text.StringBuilder()
For Each group In query
sb.AppendLine(If(group.Remainder = 0, vbCrLf & "Even numbers:", vbCrLf & "Odd numbers:"))
For Each num In group.Group
sb.AppendLine(num)
Next
Next
' Display the results.
MsgBox(sb.ToString())
' This code produces the following output:
' Odd numbers:
' 35
' 3987
' 199
' 329
' Even numbers:
' 44
' 200
' 84
' 4
' 446
' 208
List<int> numbers = new List<int>() { 35, 44, 200, 84, 3987, 4, 199, 329, 446, 208 };
IEnumerable<IGrouping<int, int>> query = from number in numbers
group number by number % 2;
foreach (var group in query)
{
Console.WriteLine(group.Key == 0 ? "\nEven numbers:" : "\nOdd numbers:");
foreach (int i in group)
Console.WriteLine(i);
}
/* This code produces the following output:
Odd numbers:
35
3987
199
329
Even numbers:
44
200
84
4
446
208
*/
参照
処理手順
方法: 入れ子になったグループを作成する (C# プログラミング ガイド)
方法: クエリ結果をグループ化する (C# プログラミング ガイド)
方法: グループ化操作でサブクエリを実行する (C# プログラミング ガイド)
方法: グループを使用して 1 つのファイルを複数のファイルに分割する (LINQ)