ruby中第一次找出函数 F 在值集 A1、A2、A3、...上为真时的最佳方法是什么?如果它们都没有将 F 变为true,则返回nil。
详细说明:假设
F(A1)=false, F(A2)=false, F(A3)=true, ...
我需要的是返回 A3 并且程序退出而不将函数 F 应用于剩余值 A4、A5、...
可以在嵌套if-else条件的帮助下做到这一点,但对于一长串值 A1、A2、...... 这似乎太乏味了。
ruby中第一次找出函数 F 在值集 A1、A2、A3、...上为真时的最佳方法是什么?如果它们都没有将 F 变为true,则返回nil。
详细说明:假设
F(A1)=false, F(A2)=false, F(A3)=true, ...
我需要的是返回 A3 并且程序退出而不将函数 F 应用于剩余值 A4、A5、...
可以在嵌套if-else条件的帮助下做到这一点,但对于一长串值 A1、A2、...... 这似乎太乏味了。
您可以利用Enumerable#detect
返回集合中为真的第一个条目。
就像是:
def check(arg)
arg == true
end
result = [false, true, true].detect do |n|
puts "checking: #{n}"
check(n)
end
你会看到它的输入[false, true, true]
会产生:
checking: false
checking: true
所以它在返回 true 的第二次迭代后停止运行。
如果值在列表中,您可以使用以下Enumerable#detect
函数:
my_stuff.detect { |item| F(item) }
编辑:我最初建议map
and any?
,但另一个答案Enumerable#detect
似乎最好。更改了示例代码以反映这一点。