2009-06-09 53 views

回答

6

我懷疑有什麼辦法,你可以做沒有引擎蓋下的環路(作爲BitArray可以任意長,不像BitVector32),但如果你只是不」不想把它寫自己:

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

我不知道你是否可以使用BitArray,但如果你使用int,long等,然後檢查它是否大於0(爲true)或小於最大值數據類型(用於false)會執行此操作。

所以是這樣的:

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


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

事實上,這將是我的建議過於假設它投影確定。 – Ian 2009-06-09 11:20:12

+3

BitArray是一種類型。它不是`int`。 – 2009-06-09 11:28:07

+0

是的,但像你說的是不是真的有檢查值,而不做一個循環的方式。我只是提供了一種檢查位數組的方式,不一定使用BitArray類型。 – kemiller2002 2009-06-09 11:33:14

1

索引到BitArray和檢驗各boolean值是一個顯而易見的解決方案。如果你關心性能,你應該首先考慮創建自己的抽象,但如果你喜歡使用BitArray對於大部分的操作,那麼你可以做使用CopyTo到合適的尺寸(Count >> 5)的int[]的檢查,然後根據需要對這些ints執行零或非零檢查。

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) 
相關問題