作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
假设我有一个值数组 [a,b,c,d,...] 和一个返回 true 或 false 的函数 f(x,...)。
[1,2,3,4].map {|x| f(x)} => [true true false true]
首先,将结果列表折叠成真值或假值的最佳方法是什么(通过 AND)?是否有允许我映射的函数:
[true true false true]
到:
((true && true) && false) && true
使用二元 && 运算符的累积成对应用?
在这种情况下,评估函数的成本是巨大的,因此想使用 lisp 风格的“and”来按顺序评估参数(函数应用程序),直到其中一个为假。确定可以做:
!![1,2,3,4].each {|x| break false if !f(x) }
这是丑陋的。希望有更优雅的方法来做到这一点。我知道我可以为 Array 添加一个新的理解,但希望有一些内置的东西可以做得更好。谢谢
最佳答案
您正在寻找 Enumerable#all?
,如果其 block 的所有调用都为真,则返回 true。还有 Enumerable#any?
,如果其 block 的任何调用为真,则返回 true:
#!/usr/bin/ruby1.8
def even(n)
n % 2 == 0
end
p [1, 2, 3, 4].all? { |i| even(i) } # => false
p [2, 4, 6, 8].all? { |i| even(i) } # => true
p [1, 2, 3, 4].any? { |i| even(i) } # => true
p [1, 3, 5, 7].any? { |i| even(i) } # => false
any?
短路:第一个真值导致它返回真。 all?
短路也是如此:第一个 falsy 值导致它返回 false。
关于ruby - 列表中 AND 的最佳功能方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2356184/
我是一名优秀的程序员,十分优秀!