加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 04:31:14 所属栏目:百科 来源:网络整理
导读:假设我有一个值数组[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 t
假设我有一个值数组[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样式的“和”来顺序评估参数(函数应用程序),直到其中一个为假.确定可以这样做:

!![1,4].each {|x| break false if !f(x) }

这很难看.希望有更优雅的方式来做到这一点.我知道我可以为Array添加一个新的理解,但希望有一些内置的东西可以做得更好.谢谢

解决方法

您正在寻找Enumerable#all ?,如果其块的所有调用都是真实的,则返回true.还有Enumerable#any ?,如果其块的任何调用都是真实的,则返回true:
#!/usr/bin/ruby1.8

def even(n)
  n % 2 == 0
end

p [1,4].all? { |i| even(i) }    # => false
p [2,4,6,8].all? { |i| even(i) }    # => true
p [1,4].any? { |i| even(i) }    # => true
p [1,5,7].any? { |i| even(i) }    # => false

任何? short-curcuits:第一个truthy值导致它返回true.所有这些都是?短路:第一个假值导致它返回false.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读