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

Tìm phần tử nhỏ nhất và lớn nhất trong List C#

LINQ cung cấp hai phương thức mở rộng Min() và Max() để tìm giá trị nhỏ nhất và lớn nhất trong một tập hợp. Các phương thức này hoạt động trên bất kỳ IEnumerable<T> nào với T implement IComparable.

Ví dụ với List<long>

List list = new List { 150, 300, 400, 350, 450, 550, 600 };
long min = list.AsQueryable().Min();  // 150
long max = list.AsQueryable().Max();  // 600

Mã nguồn hoàn chỉnh

using System;
using System.Collections.Generic;
using System.Linq;

class Demo
{
    static void Main()
    {
        List list = new List { 150, 300, 400, 350, 450, 550, 600 };
        
        foreach (long ele in list)
            Console.WriteLine(ele);
        
        long max_num = list.AsQueryable().Max();
        long min_num = list.AsQueryable().Min();
        
        Console.WriteLine("Smallest number = {0}", min_num);
        Console.WriteLine("Largest number = {0}", max_num);
    }
}

Kết quả

150
300
400
350
450
550
600
Smallest number = 150
Largest number = 600

Các overload hữu ích

// Chọn property để so sánh
var maxSalary = employees.Max(e => e.Salary);
var minDate = orders.Min(o => o.OrderDate);

// Trả về toàn bộ object có giá trị max/min (C# 7.3+)
var richest = employees.MaxBy(e => e.Salary);  // Cần .NET 6+ hoặc MoreLINQ
var oldest = orders.MinBy(o => o.OrderDate);

Lưu ý

  • Ném InvalidOperationException nếu chuỗi rỗng. Kiểm tra Any() trước hoặc dùng DefaultIfEmpty().
  • Với reference type, so sánh theo IComparable hoặc custom comparer.
  • AsQueryable() chỉ cần thiết cho LINQ to SQL/Entities. Với LINQ to Objects, dùng trực tiếp list.Min().