Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Tìm phần tử nhỏ nhất trong mảng bằng Lambda Expression C#


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 InvalidOperationException nế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ứcTrả vềVí dụ
arr.Min()Giá trị nhỏ nhất của T5
arr.Min(x => Math.Abs(x))Giá trị nhỏ nhất của selector result5 (vì |5| nhỏ nhất)