【发布时间】:2013-01-31 01:01:35
【问题描述】:
给定一个任意的布尔值列表,确定完全其中一个为真的最优雅的方法是什么?
最明显的 hack 是类型转换:将它们转换为 0 用于 false 和 1 用于 true,然后将它们相加,然后返回 sum == 1。
我想知道是否有办法做到这一点不将它们转换为整数,实际上使用布尔逻辑。
(这似乎应该是微不足道的,idk,漫长的一周)
编辑:如果不是很明显,这更像是一个代码高尔夫/理论问题。我对在 PROD 代码中使用类型转换/int 添加并不大惊小怪,我只是感兴趣是否有办法做到这一点。
Edit2:抱歉,这是漫长的一周,我没有很好地解释自己。让我试试这个:
在布尔逻辑中,如果所有布尔值都为真,则对一组布尔值进行与运算为真,如果其中至少一个为真,则对集合进行或运算为真。如果恰好一个布尔值为真,是否有一个逻辑结构为真?例如,XOR 是用于两个布尔值的集合,但除此之外,它就会失败。
【问题讨论】:
-
转换是最优雅的方法。到目前为止。
-
我很感兴趣是否有其他方法。我已经用类型转换编写了代码。如果这是答案,则答案可以是“您不能使用布尔逻辑执行此操作”。
-
为什么异或不适合你?如果一个是正确的,它评估为真。
-
好的,我意识到使用 XOR,
true and true and true将评估为true,根据您的要求,情况并非如此。 -
@Shiva - 当我想指出你刚刚意识到的关于 true ^ true ^ true 的内容时,我不小心点了你的第一个 xor 评论。无论如何,忽略upvote! =)