2009-06-09 8 views

答えて

6

私はあなたが(BitArrayBitVector32とは異なり、任意の長さにすることができたように)ボンネットの下にループせずにそれを行うことができどのような方法があります疑うが、あなただけのドンが」 tはそれを自分で書きたい:BitArray

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

もっと読みやすい.Any()を使う – juFo

1

あなたがBitArrayを使用して行うことができるかどうかは分かりませんが、int、longなどを使用して、それが0より大きい(trueの場合)か、それを行うデータ型(falseの場合)

ので、このような何か:

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


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

、それはあまりにも、それはOKキャストと仮定すると、私の提案になる予定でした。 – Ian

+3

BitArrayは型です。それは 'int'ではありません。 –

+0

ええ、あなたが言ったように、実際にはループを行わずに値をチェックする方法はありません。私はビット配列をチェックする方法を提供していただけで、必ずしもBitArray型を使用する必要はありません。 – kemiller2002

1

インデックスと個別boolean値をチェックするには、明白な解決策です。パフォーマンスについて心配している場合は、まず自分の抽象化を作成することを検討する必要がありますが、ほとんどの操作でBitArrayを使用することをお望みなら、をint[](正しいサイズ(Count >> 5))までチェックし、その後、これらのintに対して必要に応じてゼロまたは非ゼロのチェックを実行します。

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) 
+1

'Any'の代わりにもっと単純な' .Contains(true) 'を使わないことの利点はありますか?実際には、これは私が最初にやったやり方ですが、「Contains」が頭に浮かんできました。私は何か特別な理由が見つからないので、変更しました。アイデア? –