Trong Ruby, có sự khác biệt nào giữa các chức năng của each
, map
và collect
không?Sự khác biệt giữa bản đồ, từng loại và thu thập là gì?
55
A
Trả lời
107
each
là khác nhau từ map
và collect
, nhưng map
và collect
đều giống nhau (về mặt kỹ thuật map
là một bí danh cho collect
, nhưng trong kinh nghiệm của tôi map
được sử dụng rất nhiều thường xuyên hơn).
each
thực hiện khối lệnh được bao cho mỗi phần tử trong (Enumerable
) nhận:
[1,2,3,4].each {|n| puts n*2}
# Outputs:
# 2
# 4
# 6
# 8
map
và collect
sản xuất một Array
mới chứa kết quả của khối áp dụng cho mỗi phần tử của người nhận:
[1,2,3,4].map {|n| n*2}
# => [2,4,6,8]
Ngoài ra còn có map!
/collect!
được xác định trên Array
s; họ thay đổi nhận tại chỗ:
a = [1,2,3,4]
a.map {|n| n*2} # => [2,4,6,8]
puts a.inspect # prints: "[1,2,3,4]"
a.map! {|n| n+1}
puts a.inspect # prints: "[2,3,4,5]"
21
Each
sẽ đánh giá khối nhưng ném đi những kết quả của đánh giá Each
khối và trả về mảng gốc.
irb(main):> [1,2,3].each {|x| x*2}
=> [1, 2, 3]
Map
/collect
trở lại một mảng xây dựng như là kết quả của cách gọi khối cho từng hạng mục trong mảng.
irb(main):> [1,2,3].collect {|x| x*2}
=> [2, 4, 6]
bản đồ là phiên bản dành cho cộng đồng https://github.com/bbatsov/ruby-style-guide#map-fine-select-reduce-size –