2009-06-09 14 views

Respuesta

6

Dudo que haya alguna forma de poder hacerlo sin un lazo bajo el capó (como BitArray puede ser arbitrariamente largo, a diferencia de BitVector32), pero si lo que don' t desea escribir usted mismo:

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

use .Any() que es más legible – juFo

1

No sé si puede hacerlo usando un BitArray, pero si usa un int, un largo etc. y luego verifica si es mayor que 0 (verdadero) o menor que el valor máximo de el tipo de datos (para falso) que lo haría.

así que algo como esto:

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


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

De hecho, de que iba a ser mi sugerencia demasiado suponiendo que arroja bien. – Ian

+3

BitArray es un tipo. No es un 'int'. –

+0

Sí, pero como dijo, realmente no hay una forma de verificar los valores sin hacer un ciclo. Solo estaba ofreciendo una forma de verificar una matriz de bits, no necesariamente utilizando el tipo BitArray. – kemiller2002

1

de indexación en el BitArray y la comprobación de los valores individuales boolean es una solución obvia. Si le preocupa el rendimiento, primero debe considerar crear su propia abstracción, pero si prefiere usar BitArray para la mayoría de sus operaciones, puede hacer la verificación usando CopyTo en un int[] del tamaño correcto (Count >> 5), y luego realice controles cero o no cero en estas entradas, según corresponda.

2

Si está utilizando la clase BitArray de System.Collections, puede usar el siguiente código para determinar si algo es verdadero.

C# versión

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

VB.Net Versión

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

Cualquier ventaja en no ir con el simple '.Contains (true)' en vez de 'Any'? En realidad, esta es la manera en que lo hice inicialmente, pero 'Contiene' me vino a la mente y lo cambié ya que no pude encontrar ninguna razón específica. Ideas? –

Cuestiones relacionadas