使用数组,collect 和 each 之间的主要区别是什么?偏好吗?
some = []
some.collect do {|x| puts x}
some.each do |x|
puts x
end
some = []
some.collect do {|x| puts x}
some.each do |x|
puts x
end
array = []
是定义一个数组对象的快捷方式(长形式为 array = Array.new
)。
Array#collect
(和Array#map
)会根据在块中传递的代码返回一个新的数组。 Array#each
对数组的每个元素执行由块定义的操作。
我会这样使用 collect:
array = [1, 2, 3]
array2 = array.collect {|val| val + 1}
array.inspect # => "[1, 2, 3]"
array2.inspect # => "[2, 3, 4]"
而每个都像这样:
array = [1, 2, 3]
array.each {|val| puts val + 1 }
# >> 2
# >> 3
# >> 4
array.inspect # => "[1, 2, 3]"
希望这能有所帮助...
collect
(或map
)会将do块的返回值保存在一个新数组中并返回,例如:
some = [1,2,3,10]
some_plus_one = some.collect {|x| x + 1}
# some_plus_one == [2,3,4,11]
each
仅对每个项目执行 do 块,并不保存返回值。
map
和 collect
是同一个方法,只是使用了不同的命名约定。 - ase