Giới thiệu
GroupBy nhóm các phần tử trong tập hợp theo khóa (key) do selector function trả về. Trả về IEnumerable<IGrouping<TKey, TElement>> - mỗi group có Key và implement IEnumerable<TElement>.
Ví dụ cơ bản
int[] arr = { 2, 30, 45, 60, 70 };
var groups = arr.GroupBy(x => x <= 50); // Key: true/false
Ví dụ hoàn chỉnh
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); // True / False
foreach (var res in val)
Console.WriteLine(res);
}
}
static bool chkSmaller(int a) => a <= 50;
}
Kết quả
True 2 30 45 False 60 70
Các nạp chồng GroupBy phổ biến
GroupBy(keySelector)GroupBy(keySelector, elementSelector)- biến đổi element.GroupBy(keySelector, resultSelector)- biến đổi group kết quả.GroupBy(keySelector, elementSelector, resultSelector).GroupBy(keySelector, comparer)- custom IEqualityComparer cho key.
Ví dụ nâng cao: GroupBy với elementSelector
var groups = people.GroupBy(
p => p.Department, // Key selector
p => p.Name, // Element selector (chỉ lấy Name)
(dept, names) => new // Result selector
{
Department = dept,
Count = names.Count(),
Members = names.ToList()
});
Lưu ý
- Deferred execution.
- Giữ nguyên thứ tự phần tử trong mỗi group (stable).
- Thứ tự group theo thứ tự key xuất hiện lần đầu.
- Với key phức tạp, cần implement
IEqualityComparerhoặc override Equals/GetHashCode.