提问人:Ashish Jambhulkar 提问时间:9/1/2017 最后编辑:Ashish Jambhulkar 更新时间:9/1/2017 访问量:1180
ruby 中布尔数组的最终逻辑值
Final logical value of boolean array in ruby
问:
假设我有一个数组,如下所示:
[true, true, false]
我正在传递一个运算符以及数组,它可能是 ,或 。AND
OR
XOR
所以我想根据指定的运算符计算数组的逻辑值。
前任:
对于给定的数组和运算符,我应该能够对数组中的 n 个元素执行连续执行[true, true, false]
AND
Steps: true AND true -> true, true AND false -> false
因此,输出应该是false
该数组可以是 n 个布尔值。
答:
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,并且只是同一函数的别名。自己试试,如果交换函数名称,这两个示例的工作方式应该完全相同inject
reduce
2赞
tadman
9/1/2017
三元方法是荒谬的,应该删除。带有查找表的版本应该是这里唯一的答案。
0赞
tadman
9/1/2017
inject
/reduce
就像 / 和 / 一样,它们只是别名。map
select
length
size
1赞
engineersmnky
9/2/2017
你问了一个你显然已经,或者相对立即意识到答案并自己回答的问题?你能解释一下你的理由吗?此外,如前所述@tadman,第一个是“荒谬的”,第二个假设不是“AND”或“OR”是“XOR”,第二个将提高任何不是“AND”、“OR”或“XOR”的值。在这两种情况下,这些都不是逻辑运算,而是按位(二进制)运算。逻辑 AND 是 和 逻辑 OR 是 ( 并且 在技术上也是合乎逻辑的,但由于优先级,通常被称为控制流运算符)。&&
||
and
or
0赞
engineersmnky
9/2/2017
此外,这假设始终是一个,否则错误比比皆是array[0]
TrueClass
FalseClass
评论