Giới thiệu
Phương thức Min() trong LINQ có nạp chồng nhận selector (Func<T, TResult>) cho phép biến đổi phần tử trước khi so sánh. Ví dụ dùng Math.Abs để tìm phần tử có giá trị tuyệt đối nhỏ nhất.
Ví dụ cơ bản
int[] arr = { 10, 15, 5, 20 };
// Tìm phần tử có giá trị tuyệt đối nhỏ nhất
int minAbs = arr.Min(element => Math.Abs(element)); // 5
Ví dụ hoàn chỉnh
using System;
using System.Linq;
class Demo
{
static void Main()
{
int[] arr = { 10, 15, 5, 20 };
Console.WriteLine(arr.Min(element => Math.Abs(element)));
}
}
Kết quả
5
Giải thích
- Mảng: 10, 15, 5, 20
- Áp dụng Math.Abs: 10, 15, 5, 20
- Min: 5
Các ví dụ selector khác
// Tìm chuỗi ngắn nhất
string[] words = { "apple", "banana", "fig" };
int minLen = words.Min(w => w.Length); // 3
// Tìm sản phẩm giá thấp nhất
var cheapestPrice = products.Min(p => p.Price);
// Tìm ngày sớm nhất
DateTime earliest = dates.Min(d => d.Date);
Lưu ý
- Selector được gọi cho mỗi phần tử (deferred execution).
- Ném
InvalidOperationExceptionnếu mảng rỗng. - Selector trả về kiểu phải implement
IComparable(số, string, DateTime, ...). - Với nullable, selector có thể trả về null -> cần xử lý (ví dụ:
Min(x => x ?? int.MaxValue)).
So sánh Min() vs Min(selector)
| Phương thức | Trả về | Ví dụ |
|---|---|---|
arr.Min() | Giá trị nhỏ nhất của T | 5 |
arr.Min(x => Math.Abs(x)) | Giá trị nhỏ nhất của selector result | 5 (vì |5| nhỏ nhất) |