我有一个返回哈希的方法。我想重复这个方法五次,将结果收集到一个数组中。现在,我正在尝试这样:
votes = 5.times.collect{ create_vote }.inject{|memo, vote| memo << vote}
这不起作用,我相信它失败了,因为备忘录不是数组。我可以采取另一种方法解决这个问题吗?
答案 0 :(得分:4)
是:
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
非常常见。
答案 1 :(得分:3)
在一个范围内使用#map而不是在fixnum上使用#times
(0..5).map { create_vote }
或者,从时间映射数组
5.times.map { create_vote }
每个都会给你一个包含5个元素的数组。
答案 2 :(得分:1)
怎么样:
votes = (1..5).collect { create_vote }
答案 3 :(得分:0)
我尝试使用接受的答案,但后来Rubocop告诉我使用Array.new
会更快:
votes = Array.new(5) { create_vote }