gpt4 book ai didi

ruby - 列表中 AND 的最佳功能方法

转载 作者:数据小太阳 更新时间:2023-10-29 06:56:40 25 4
gpt4 key购买 nike

假设我有一个值数组 [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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com