each
chỉ cần lặp qua số đếm được cho trước, chạy khối cho từng giá trị. Nó loại bỏ các giá trị trả về của khối, và mỗi chỉ đơn giản trả về đối tượng ban đầu nó được gọi vào lúc:
[1, 2, 3].each do |i|
i + 1
end # => [1, 2, 3]
này chỉ đơn giản là một cách phổ quát hơn đẹp hơn làm một iterating for
loop truyền thống, và each
là nhiều ưa thích hơn for
vòng trong Ruby (trên thực tế, tôi không nghĩ rằng tôi đã từng sử dụng một vòng lặp for
trong Ruby).
map
, tuy nhiên, lặp trên mỗi phần tử, bằng cách sử dụng giá trị trả về của khối để cư một mảng mới ở mỗi chỉ số tương ứng và gửi lại rằng mảng mới:
[1, 2, 3].map do |i|
i + 1
end # => [2, 3, 4]
Vì vậy, nó là "bản đồ" từng yếu tố để một cái mới sử dụng khối đã cho, do đó tên "bản đồ". Lưu ý rằng không phải each
cũng không tự map
sửa đổi bộ sưu tập gốc.
Nguồn
2012-03-06 15:50:25
... và ngoài câu trả lời của Andrew và Bryan tôi thêm rằng có một phương pháp khác gọi là * thu thập * giống hệt * bản đồ *;) –
Yup, 'map' &' collect' là tương đương. Mặc dù tôi không bao giờ thích cái tên "thu thập" vì tôi không nghĩ nó thực sự mô tả những gì nó làm rất tốt. –