【问题标题】:Final logical value of boolean array in rubyruby 中布尔数组的最终逻辑值
【发布时间】:2018-02-09 18:57:17
【问题描述】:

假设我有一个看起来像这样的数组:

[true, true, false] 

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

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

例如:

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

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

因此输出应该是false

数组可以是 n 个布尔值。

【问题讨论】:

    标签: arrays ruby boolean boolean-logic


    【解决方案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
    

    【讨论】:

    • IIRC、injectreduce 只是同一个函数的别名。自己尝试一下,如果您交换函数名称,两个示例的工作方式应该完全相同
    • 三元法很荒谬,应该去掉。带有查找表的版本应该是这里唯一的答案。
    • inject/reduce 就像map/selectlength/size,它们只是别名。
    • 您问了一个问题,您已经很清楚,或者相对立即知道答案并自己回答了?你能解释一下你的推理吗?此外,@tadman 所说的第一个是“荒谬的”,第二个假设不是“AND”或“OR”是“XOR”,第二个将引发任何不是“AND”、“OR”或“XOR”的值。在这两种情况下,这些都不是逻辑运算,而是按位(二进制)运算。逻辑 AND 是 &&,逻辑 OR 是 ||andor 在技术上也是逻辑的,但由于优先级,通常称为控制流运算符)。
    • 此外,这假定 array[0] 始终是 TrueClassFalseClass 否则错误比比皆是
    猜你喜欢
    • 2013-10-06
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    相关资源
    最近更新 更多