2009-06-09 6 views

답변

6

난 당신이 (A 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

사실, 그건 내 제안이 될 거라고 너무 그것을 확인 캐스트 가정. – Ian

+3

BitArray는 형식입니다. 'int'가 아닙니다. –

+0

그래,하지만 당신이 말한 것처럼 실제로 루프를 수행하지 않고 값을 검사하는 방법은 없습니다. BitArray 형식을 사용하지 않고 비트 배열을 검사하는 방법을 제공하고있었습니다. – kemiller2002

1

인덱싱 및 개별 boolean 값을 확인하는 것은 명백한 솔루션입니다. 퍼포먼스에 관심이 있다면 가장 추상적 인 추상화를 고려해야하지만 대부분의 작업에 BitArray을 사용하려면 CopyTo을 사용하여 int[] (올바른 크기 (Count >> 5))의 검사를 수행하고 그런 다음 이들 int에 대해 0 또는 0이 아닌 검사를 적절하게 수행하십시오.

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)를 사용하지 않을 경우의 이점은 무엇입니까? 실제로 이것은 처음에했던 방식 이었지만 '포함하다'는 생각이 들었다. 특별한 이유를 찾을 수 없기 때문에 그것을 변경했다. 아이디어? –

관련 문제