Đây có lẽ là một câu hỏi thường gặp trong các cuộc phỏng vấn lập trình viên .NET khi sử dụng mảng. Trong bài này, chúng ta sẽ tìm hiểu cách tính tổng các phần tử của một mảng trong C#. Sau khi nghiên cứu các kỹ thuật khác nhau, chúng ta xây dựng các kỹ thuật code và chú trọng vào hiệu suất và kiểm tra xem cái nào là cách tiếp cận tốt nhất để sử dụng trong mỗi tình huống.

Sử dụng vòng lặp để tính tổng các phần tử của một mảng
1. Sử dụng vòng lặp For
public int ForLoop(int[] sourceArray)
{
var result = 0;
for (int i = 0; i < sourceArray.Length; i++)
result += sourceArray[i];
return result;
}
Phương thức này nhận một mảng làm tham số đầu vào và trả về một số nguyên đại diện cho tổng của tất cả các phần tử trong mảng. Bên trong nó, chúng tôi tạo một biến result mới và gán giá trị 0 cho nó. Sau đó, chúng tôi lặp qua toàn bộ mảng và tăng biến này với tổng của mỗi phần tử của mảng.
2. Sử dụng vòng lặp Foreach
public int ForeachLoop(int[] sourceArray)
{
var result = 0;
foreach (var item in sourceArray)
result += item;
return result;
}
Tương tự như kỹ thuật trước, chúng ta định nghĩa một biến result và đối với mỗi phần tử trong mảng, tính tổng giá trị và lưu trữ nó vào biến này.
Sử dụng lớp Array để tính tổng các phần tử của một mảng
public int ArrayForEach(int[] sourceArray)
{
var result = 0;
Array.ForEach(sourceArray, value => result += value);
return result;
}
Trong cách tiếp cận này, chúng ta định nghĩa một biến result và gán giá trị 0 làm giá trị của nó. Sau đó, chúng ta sẽ sử dụng phương thức ForEach dưới lớp Array, để tính tổng tất cả các phần tử.
Sử dụng System.Linq để tính tổng các phần tử của một mảng
1. Enumerable.Sum
return Enumerable.Sum(sourceArray);
Hoặc một cách khác đơn giản hơn:
return sourceArray.Sum();
Lưu ý rằng đây là một phương pháp mở rộng. Điều đó nói rằng, cả hai cách sẽ thực thi cùng một phương thức.
2. Enumerable.Aggregate
return sourceArray.Aggregate((total, value) => total + value);
Aggregate thực hiện một thao tác trên mỗi phần tử của danh sách có tính đến các thao tác đã thực hiện trước đó. Điều đó có nghĩa là nó thực hiện hành động trên phần tử thứ nhất và thứ hai và mang kết quả về phía trước. Sau đó, nó hoạt động dựa trên kết quả trước đó và phần tử thứ ba và chuyển tiếp….
Lời kết
Như trên ta có thể thấy được, để ra được kết như mong muốn thì có rất nhiều cách, nhưng sau cùng ta cần chú tâm đến hiệu suất giữa các cách thực hiện. Ví dụ nhưng ta tính tổng 1 triệu phần tử trong tử trong mảng thì đâu là cách nhanh nhất.
Sau khi áp dụng Benchmark để so sánh hiệu năng thì ta thấy được thứ tự nhanh đến chậm nhất như sau: vòng lặp For, vòng lặp Foreach, ArrayForEach, EnumerableSum, ArraySum, Aggregate. Với hiệu năng của vòng lặp găps 13 lần Aggregate, vì thế bạn hãy chọn các phù hợp để áp dụng cho dự án của mình.
Nguồn tham khảo: https://code-maze.com/
Mong bài viết hữu ích, chúc các bạn thành công.