检查至少十分之二的布尔值是真的
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时出错