【发布时间】:2019-06-14 06:53:48
【问题描述】:
我一直在尝试将带有数字的数组收集到一个数组中。如果我尝试使用 + 它会返回 emty 数组作为输出。使用 concat 返回预期的数字数组。它是如何工作的,这些 Ruby 方法之间的主要区别是什么?
0.step.with_object([]) do |index, output|
output + [index]
break output if index == 100
do # returns empty array
0.step.with_object([]) do |index, output|
output.concat [index]
break output if index == 100
end # returns an array contains digits from 0 to 100
【问题讨论】:
-
顺便说一句,
output.concat [index]等同于output << index- 您不必将单个元素包装在数组中即可将其附加到另一个数组。 -
还有很多更好的方法可以实现“将带有数字的数组收集到一个数组中”的目标您当前的代码相当于
0.upto(100).to_a、(0..100).to_a、0.upto(100).reduce([],&:<<)等。但是你有一个Array或Arrays你试图折叠它们arr_of_arrs.reduce(&:concat)可以工作,但最简单的方法就是arr_of_arrs.flatten。如果您想累积它们但维护内部数组,那么arr_of_arrs.reduce([],&:+)