使用数组收集和每个数据之间的主要区别是什么?偏爱?
some = []
some.collect do {|x| puts x}
some.each do |x|
puts x
end
答案 0 :(得分:36)
array = []
是定义数组对象的快捷方式(长格式:array = Array.new
)
Array#collect
(和Array#map
)根据块中传递的代码返回一个新数组。 Array#each
对数组的每个元素执行一个操作(由块定义)。
我会像这样使用收集:
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]"
希望这会有所帮助......
答案 1 :(得分:4)
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块,并且不会保存返回值。