检查至少十分之二的布尔值是真的

Posted

技术标签:

【中文标题】检查至少十分之二的布尔值是真的【英文标题】:check at least two out of ten booleans are true 【发布时间】:2012-10-27 15:38:37 【问题描述】:

如果三个布尔值中至少有两个为真,这是最简单的找出方法:

BOOL a, b, c;
-(BOOL)checkAtLeastTwo

  return a && (b || c) || (b && c); 

如果有十个布尔值并且其中至少两个必须为真,那么最佳解决方案是什么?提前致谢。

【问题讨论】:

【参考方案1】:

您的原始实现是次优的 - 您可以对真实值求和:

return (int)a + (int)b + (int)c >= 2;

显然您可以将其扩展到 10 个变量:

return (int)a + (int)b + (int)c + (int)d + (int)e +
       (int)f + (int)g + (int)h + (int)i + (int)j >= 2;

【讨论】:

假设所讨论的语言将布尔值 true 提升为整数值 1,这是可行的——我认为这对于大多数常见的现代语言都是正确的,但值得指出这个假设。我似乎记得至少一种语言,其中 boolean true 提升为全 1 位模式,所以在那种情况下这显然行不通(我现在无法确定它是什么语言,甚至可能没有是一个“真正的”,但一个学术玩具或什么的......)。即使是这种情况,您也可以使用条件或其他东西重写此模式...... @twalberg,是的,当然......但我认为在这种情况下,用任何语言编写自己的转换方法都不应该是 ahrd :) 是的——这适用于所有类 C 语言(除此之外还有很多),并且 OP 显然使用的是 Objective-C。但是对于 true 不等于 1 的语言,相同的通用方法应该仍然可行,但需要进行一些调整。【参考方案2】:

在 C 中,您可以只检查变量的总和

return a + b + .... + n >= 2;

如果您的语言不支持从布尔到整数的隐式转换,您可以简单地将变量转换为整数并检查转换值的总和。

【讨论】:

以上是关于检查至少十分之二的布尔值是真的的主要内容,如果未能解决你的问题,请参考以下文章

如何检查布尔值是真还是假?

检查布尔数组中的所有值是不是为真的最优雅方法是啥?

在ios uiwebview objective-c中检查布尔值是yes还是no时出错

Python 的布尔值是按值传递的吗?

强制转换为布尔值是检查是不是存在与键匹配的 unordered_map 值的有效方法吗? C++

多个应用程序进程可访问的布尔值