我有一个如下所示的数组:
bool[] array = new bool[4] { true, false, true, true } ;
我想在这个数组的所有元素之间做一个 AND/OR 比较,比如:
AND example: true AND false AND true AND true
所以我可以获得在上面的示例中为假的最终结果,或者:
OR example: true OR false OR true OR true
在上面的例子中,这会给我 true。
数组中是否有任何内置方法允许我这样做?还是我必须在所有元素之间迭代并一一比较?
最佳答案
根据评论和其他答案,您可以对这两者使用 LINQ。 (尽管您不必这样做;farbiondriven 的答案绝对可以正常工作,尽管它的通用性较低,因为 LINQ 解决方案可以处理任何 IEnumerable<bool>
。)
Any
使用身份投影将检测任何元素是否为true
,这与执行逻辑 OR
的结果相同在所有元素上。
All
使用身份投影将检测所有元素是否为true
,这与执行逻辑 AND
的结果相同在所有元素上:
bool orResult = array.Any(x => x);
bool andResult = array.All(x => x);
这两个都会短路:如果第一个元素是 true
, 然后 Any
不会费心查看后面的元素,因为结果肯定是 true
.同样,如果第一个元素是 false
, 然后 All
不会费心查看后面的元素,因为结果肯定是 false.
但是,您可能需要考虑您希望空数组的结果是什么。 Any()
将返回 false
在空序列上,而 All
将在空序列上返回 true。这可能是也可能不是您期望或需要的。
关于c# - 热逻辑比较 bool 数组与它自己的单个 bool 结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49632043/