多次调用函数并获取结果列表

时间:2012-01-09 19:10:57

标签: ruby function dictionary reduce

我想调用函数f 5次(例如)并获取结果列表。现在我有这个:

(1..5).to_a.map!{f}

注意:现在f是一个不接受任何输入并返回truefalse的函数。因此,当运行完毕后,我会得到5个true / false值的列表。

有没有更好的方法来使用其他内置函数(可能reduce?)我有这个想法,但无法弄清楚如何使用它...)

4 个答案:

答案 0 :(得分:34)

5.times.collect { f }

(假设没有参数。mapcollect的别名;在实际收集时我更喜欢名称collect,因为它似乎更具沟通性,但是YMMV。)

我也更喜欢较长5.times而不是(1..5)。这似乎也更具沟通性:我不是真的"迭代一个范围",我做了五次"。

IMO答案在这种情况下有点违反直觉,因为我没有真正运行collect五次,但是collect.5.times { f }不起作用,所以我们玩了一下无论如何,这是一场心理游戏。

答案 1 :(得分:5)

如果您想要基于零的增加参数,请尝试使用Array构造函数的块形式:

Array.new(5) {|x| (x+1).to_f} # => [1.0, 2.0, 3.0, 4.0, 5.0]
Array.new(10) { rand } # => [0.794129655156092, ..., 0.794129655156092]

答案 2 :(得分:1)

将Array.new与块

一起使用
Array.new(10) { f }

如果需要,索引值可用:

Array.new(10) { |i| f(i) }

From the docs

  

[使用块],创建给定大小的数组。通过将元素的索引传递给给定块并存储返回值来创建此数组中的每个元素。

at least 1.8.7以来,这已经成为可能。

答案 3 :(得分:0)

你可以通过不放to_a来缩短你的代码......(1..5)是一个可枚举的,所以它适用于map。

(1..5).map!{f}