我有一个返回哈希的方法。我想通过这个方法重复五次,将结果收集到一个数组中。现在,我正在尝试这样:
votes = 5.times.collect{ create_vote }.inject{|memo, vote| memo << vote}
这不起作用,我相信它失败了,因为 memo 不是数组。我可以采取另一种方法来解决这个问题吗?
是的:
votes = 5.times.collect { create_vote }
更一般地说,使用each_with_object
:
votes = 5.times.collect { create_vote }.each_with_object([]) {|o,memo| memo << o }
each_with_object
是一个添加的方法,因为 Ruby Core 发现inject
以您打算使用的方式使用它非常普遍。
在范围上使用 #map 而不是在固定数字上使用 #times
(0..5).map { create_vote }
或者,从时间映射一个数组
5.times.map { create_vote }
每个都会给你一个包含 5 个元素的数组。
怎么样:
votes = (1..5).collect { create_vote }
我尝试使用接受的答案,但后来Rubocop告诉我,这样使用会更快Array.new
:
votes = Array.new(5) { create_vote }