ruby 中布尔数组的最终逻辑值

Final logical value of boolean array in ruby

提问人:Ashish Jambhulkar 提问时间:9/1/2017 最后编辑:Ashish Jambhulkar 更新时间:9/1/2017 访问量:1180

问:

假设我有一个数组,如下所示:

[true, true, false] 

我正在传递一个运算符以及数组,它可能是 ,或 。ANDORXOR

所以我想根据指定的运算符计算数组的逻辑值。

前任:

对于给定的数组和运算符,我应该能够对数组中的 n 个元素执行连续执行[true, true, false]AND

Steps: true AND true -> true, true AND false -> false

因此,输出应该是false

该数组可以是 n 个布尔值。

数组 ruby boolean-logic

评论


答:

3赞 Ashish Jambhulkar 9/1/2017 #1

最好和最简单的方法是使用:reduce

def logical_calculation(arr, op)
  op=='AND' ? arr.reduce(:&) : op=='OR' ? arr.reduce(:|) : arr.reduce(:^)
end

另一种方式可能是使用inject

OPS = { "AND" => :&, "OR" => :|, "XOR" => :^ }

    def logical_calculation(array, op)
      array.inject(&OPS[op])
    end

评论

0赞 quetzalcoatl 9/1/2017
IIRC,并且只是同一函数的别名。自己试试,如果交换函数名称,这两个示例的工作方式应该完全相同injectreduce
2赞 tadman 9/1/2017
三元方法是荒谬的,应该删除。带有查找表的版本应该是这里唯一的答案。
0赞 tadman 9/1/2017
inject/reduce就像 / 和 / 一样,它们只是别名。mapselectlengthsize
1赞 engineersmnky 9/2/2017
你问了一个你显然已经,或者相对立即意识到答案并自己回答的问题?你能解释一下你的理由吗?此外,如前所述@tadman,第一个是“荒谬的”,第二个假设不是“AND”或“OR”是“XOR”,第二个将提高任何不是“AND”、“OR”或“XOR”的值。在这两种情况下,这些都不是逻辑运算,而是按位(二进制)运算。逻辑 AND 是 和 逻辑 OR 是 ( 并且 在技术上也是合乎逻辑的,但由于优先级,通常被称为控制流运算符)。&&||andor
0赞 engineersmnky 9/2/2017
此外,这假设始终是一个,否则错误比比皆是array[0]TrueClassFalseClass