Tổng hợp các cách tìm giá trị lớn nhất của một mảng trong C#

Trong bài này, chúng ta sẽ tìm hiểu các kỹ thuật khác nhau để tìm giá trị lớn nhất của một mảng trong C#. Và cuối cùng chúng ta sẽ kiểm tra, so sánh hiệu suất để xem đâu là cách tiếp cận nhanh hơn.
Tổng hợp các cách tìm giá trị lớn nhất của một mảng trong C#

Sử dụng Enumerable.Max

Max là một phương thức mở rộng cho interface IEnumerable không yêu cầu tham số và trả về giá trị lớn nhất trong một mảng:
return sourceArray.Max();

Nếu chúng ta có một mảng string, output đầu tiên sẽ theo thứ tự bảng chữ cái. Có nghĩa là phương thức này không chỉ hoạt động với các mảng int mà còn với bất kỳ loại đối tượng nào triển khai interface System.IComperable.

Sử dụng OrderByDescending

System.Linq cho phép chúng ta nhận giá trị lớn nhất từ một mảng sau khi sắp xếp nó ở dạng giảm dần:
return sourceArray.OrderByDescending(x => x).First();

Khác với cách tiếp cận Enumerable.Max, nó yêu cầu một biểu thức lambda làm tham số cho thuộc tính nào để so sánh.

Phương thức OrderByDescending trả về thứ tự giảm dần. Dựa trên điều này, chúng ta chỉ cần gọi First() để lấy phần tử lớn nhất hay phần tử đầu tiên.

Enumerable.MaxBy

Kể từ .NET 6, chúng ta có thể thay thế các phương pháp trên bằng Enumerable.MaxBy:
return sourceArray.MaxBy(x => x);

Với phương thức này, chúng ta không cần phải sắp xếp thứ tự mảng của mình và sau đó trả về phần tử đầu tiên. Tất cả những gì chúng ta phải làm là gọi phương thức truyền biểu thức lambda của chúng ta dưới dạng tham số, cho biết thuộc tính nào chúng ta muốn so sánh.

Tương tự như phương thức lấy phần tử tối đa, .NET 6 cũng cung cấp một phương thức để trả về phần tử tối thiểu:
return sourceArray.MinBy(x => x);

Sử dụng câu lệnh for

Bây giờ, hãy tạo một phương thức GetLargerstElementUsingFor mới để chỉ ra cách có thể tìm phần tử lớn nhất của một mảng với một phép lặp đơn giản:
public int GetLargestElementUsingFor(int[] sourceArray)
{
    int maxElement = sourceArray[0];
    for (int index = 1; index < sourceArray.Length; index++)
    {
        if (sourceArray[index] > maxElement)
            maxElement = sourceArray[index];
    }
    return maxElement;
}

Để tìm phần tử tối đa theo cách thủ công, trước tiên, chúng ta cần khởi tạo biến maxElement và gán cho nó bằng phần tử đầu tiên của mảng, tức là ban đầu, ta chỉ định cho phần tử đầu tiên là lớn nhất.

Sau đó, lặp lại việc kiểm tra mảng nếu mỗi phần tử lớn hơn giá trị maxElement. Khi phần tử lớn hơn, chúng ta nên gán giá trị của nó cho maxElement.

Khi kết thúc vòng lặp, chúng ta chỉ cần trả về biến maxElement.

Lời kết

Trong bài viết này, chúng ta đã thấy rằng chúng ta có nhiều cách để tìm giá trị lớn nhất từ một mảng.

Sau khi áp dụng Benchmark, ta thấy cách nhanh nhất để tìm ra giá trị lớn nhất sẽ lần lượt như sau: câu lệnh for, Enumerable.Max, MaxBy, OrderByDescending.

Lưu ý rằng, sử dụng vòng lặp for nhanh hơn nhiều so với bất kỳ cách tiếp cận nào khác. Nhanh hơn gần mười hai lần so với cách tiếp cận tốt nhất thứ hai và nhanh hơn gần hai mươi lần so với cách tiếp cận kém nhất.
Vì thế, bạn nên lựa chọn phương pháp phù hợp khi sử dụng để tìm giá trị lớn nhất trong một mảng nhiều phần tử.
Mong bài viết hữu ích, chúc các bạn thành công!
Hieu Ho.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *