如何检查bitArray是否包含任何true或任何false值?

时间:2009-06-09 11:14:35

标签: c# vb.net

在C#和Vb.net中,没有任何方法可以循环迭代一个bitarray来检查contins的任何真值或假值(Dotnet 2.0)?

4 个答案:

答案 0 :(得分:7)

我怀疑你有没有办法在没有循环的情况下做到这一点(因为BitArray可以任意长,不像BitVector32),但如果你只是不想写它自己:

var hasAnyTrue = input.Cast<bool>().Contains(true);
var hasAnyFalse = input.Cast<bool>().Contains(false);

答案 1 :(得分:2)

如果您正在使用System.Collections中的BitArray类,则可以使用以下代码来确定是否有任何内容。

C#版

var anyTrue = myArray.Cast<bool>().Any(x => x);

VB.Net版

Dim anyTrue = myArray.Cast(Of Boolean)().Any(Function(x) x)

答案 2 :(得分:1)

我不知道你是否可以使用BitArray来做,但如果你使用int,long等然后检查它是否大于0(对于true)或小于最大值可以做到的数据类型(表示错误)。

这样的事情:

bool IsTrue (int bitArray)
{
  return bitArray != 0;
}


bool isFalse (int bitArray)
{
   return bitArray != int.MinValue;
}

答案 3 :(得分:1)

索引到BitArray并检查各个boolean值是一个明显的解决方案。如果您担心性能问题,首先应考虑创建自己的抽象,但如果您希望在大多数操作中使用BitArray,则可以使用CopyTo进行检查int[] 1}}正确的大小(Count >> 5),然后根据需要对这些整数执行零或非零检查。