This page is READ-ONLY. It is generated from the old site.
All timestamps are relative to 2013 (when this page is generated).
If you are looking for TeX support, please go to VietTUG.org

Mảng: tính tổng và giá trị trung bình

Giới thiệu hàm inject
Added by over 2 years ago  »  Votes: 3/3

Cho trước một mảng các số, Ruby không có sẵn hàm để tính tổng, giá trị trung bình của tất cả các phần tử của mảng. Trong nhiều trường hợp, ta sẽ cần viết bổ sung nhanh các hàm sum, average cho lớp mảng. Có thể dùng vòng lặp (for, foreach, while,...) để duyệt qua các phần tử của mảng rồi cộng chúng lại với nhau (theo cách quen thuộc khi học nhập môn các ngôn ngữ lập trình.) Tuy nhiên, Ruby cung cấp hàm inspect rất đơn giản

1 class Array
2   def sum
3     inject(0) {|s,i| s + i}
4   end
5 end

Trong biểu thức |s,i| của ví dụ trên, biến i đại diện cho phần tử của mảng, còn biến s sẽ thay đổi giá trị và sự thay đó sẽ lưu trữ lại cho lần lặp kế tiếp. Giá trị khởi đầu của s có thể cho bằng tham số bổ sung của hàm inject, như ở trên là 0. Kết quả trả về của toàn bộ biểu thứ inject là giá trị s được tính toán sau cùng. Lưu ý rằng, ta đã giả định mảng chỉ gồm các số nguyên. Việc xác nhận tính chất này có thể thay đổi tùy trường hợp, nên không được nêu ra ở đây.

Khi đã có hàm sum thì hàm average thật đơn giản

1   def average
2     size > 0 ? sum / size : 0
3   end

Một ví dụ khác: tính tổng tất cả các số dương trong một mảng số

1 class Array
2   def psum
3     inject(0) {|s,i| i > 0 ? s + i : s}
4   end
5 end

Comments