1

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

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

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

4

4 回答 4

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以您打算使用的方式使用它非常普遍。

于 2013-01-16T22:25:47.657 回答
3

在范围上使用 #map 而不是在固定数字上使用 #times

(0..5).map { create_vote }

或者,从时间映射一个数组

5.times.map { create_vote }

每个都会给你一个包含 5 个元素的数组。

于 2013-01-16T22:39:03.387 回答
1

怎么样:

votes = (1..5).collect { create_vote }
于 2013-01-16T22:24:46.320 回答
0

我尝试使用接受的答案,但后来Rubocop告诉我,这样使用会更快Array.new

votes = Array.new(5) { create_vote }
于 2016-07-18T23:46:15.660 回答