仅当Ruby中的所有值都为true时返回true

MxL*_*evs 13 ruby

验证可枚举的所有元素是否满足某个条件的快速方法是什么?我在逻辑上猜它会是这样的:

elements = [e1, e2, e3, ...]
return (condition on e1) && (condition on e2) && (condition on e3) && ...
Run Code Online (Sandbox Code Playgroud)

例如,如果我有一个整数数组,我想回答"是否所有整数都是奇数?"的问题.

我总是可以迭代每个值,检查它是否为真,然后当其中一个返回false时返回false,但是有更好的方法吗?

Mak*_*oto 23

您可以使用all?Enumerable mix-in中的函数.

elements = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
return elements.all? { |elem| elem % 2 != 0 }
Run Code Online (Sandbox Code Playgroud)

或者,正如评论中指出的那样,odd?如果您正在寻找特殊值,您也可以使用它.

elements = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
return elements.all?(&:odd?)
Run Code Online (Sandbox Code Playgroud)

  • 你实际上可以在数字上调用`odd?`而不是使用modulo,这意味着你可以简单地做`elements.all?(&:odd?)`. (5认同)