2012-02-24 16 views

Trả lời

107

each là khác nhau từ mapcollect, nhưng mapcollect đề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 

mapcollect 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]" 
+2

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 –

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]