Ruby一行代码,中断一个块

时间:2012-02-12 08:20:26

标签: ruby

我正在尝试编写一行代码来告诉我数组中是否有符合一组条件的元素然后依赖于true。

例如

我有[1,2,3,4,5,6,7,8,9,10,11,12]并且我想找到第一个可被2和3整除的元素。我想写一个衬里,一旦它到达6就会返回true并且不处理其余的元素数组。

我可以为每个循环编写一个并打破,但我觉得应该有一种方法可以在一行代码中完成。

2 个答案:

答案 0 :(得分:5)

any?

[1,2,3,4,5,6,7,8,9,10,11,12].any?{|e| e % 2 == 0 && e % 3 == 0}

或者您可以将其与all?结合使用,并提供一个很好的教程示例:

[1,2,3,4,5,6,7,8,9,10,11,12].any?{|e| [2, 3].all?{|d| e % d == 0}}

如果您确实需要返回第一个匹配元素,请使用find

[1,2,3,4,5,6,7,8,9,10,11,12].find{|e| [2,3].all?{|d| e % d == 0}}
# => 6 

答案 1 :(得分:4)

您应该使用:find

[1,2,3,4,5,6,7,8,9,10,11,12].find{|e| e % 2 == 0 && e % 3 == 0}

它将返回6,并且它将不会在6之后处理值。