【发布时间】:2009-06-09 11:14:35
【问题描述】:
在 C# 和 Vb.net 中,是否有任何方法不通过循环迭代位数组来检查是否有任何真假值(Dotnet 2.0)?
【问题讨论】:
在 C# 和 Vb.net 中,是否有任何方法不通过循环迭代位数组来检查是否有任何真假值(Dotnet 2.0)?
【问题讨论】:
我怀疑是否有任何方法可以在没有底层循环的情况下做到这一点(因为 BitArray 可以任意长,与 BitVector32 不同),但如果你不想自己写:
var hasAnyTrue = input.Cast<bool>().Contains(true);
var hasAnyFalse = input.Cast<bool>().Contains(false);
【讨论】:
如果您使用 System.Collections 中的 BitArray 类,您可以使用以下代码来确定是否为真。
C#版本
var anyTrue = myArray.Cast<bool>().Any(x => x);
VB.Net版
Dim anyTrue = myArray.Cast(Of Boolean)().Any(Function(x) x)
【讨论】:
.Contains(true) 而不是Any 有什么好处?实际上,这就是我最初这样做的方式,但是我想到了Contains,我改变了它,因为我找不到任何具体的原因。想法?
索引BitArray 并检查各个boolean 值是一个明显的解决方案。如果您关心性能,您应该首先考虑创建自己的抽象,但如果您更喜欢在大多数操作中使用BitArray,那么您可以使用CopyTo 对右侧的int[] 进行检查大小 (Count >> 5),然后根据需要对这些整数执行零或非零检查。
【讨论】:
我不知道你是否可以使用 BitArray,但是如果你使用 int、long 等,然后检查它是否大于 0(为真)或小于可以做到这一点的数据类型(为 false)。
所以是这样的:
bool IsTrue (int bitArray)
{
return bitArray != 0;
}
bool isFalse (int bitArray)
{
return bitArray != int.MinValue;
}
【讨论】:
int。
int 是有符号类型。 hasFalse 应该检查 != int.MinValue 而 hasTrue 应该检查 `!= 0`。