Ruby:多次重复一个方法并在数组中收集结果

时间:2013-01-16 22:20:13

标签: ruby arrays

我有一个返回哈希的方法。我想重复这个方法五次,将结果收集到一个数组中。现在,我正在尝试这样:

votes = 5.times.collect{ create_vote }.inject{|memo, vote| memo << vote}

这不起作用,我相信它失败了,因为备忘录不是数组。我可以采取另一种方法解决这个问题吗?

4 个答案:

答案 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 }