2009-06-09 39 views

Trả lời

6

tôi nghi ngờ có bất kỳ cách nào bạn có thể làm điều đó mà không có một vòng dưới mui xe (như là một BitArray có thể tùy tiện lâu, không giống như BitVector32), nhưng nếu bạn chỉ don' t muốn viết nó cho mình:

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

sử dụng. Bất kỳ() nào dễ đọc hơn – juFo

1

Tôi không biết nếu bạn có thể làm điều đó bằng cách sử dụng một BitArray, nhưng nếu bạn sử dụng một int, dài vv và sau đó kiểm tra xem nếu nó lớn hơn 0 (cho đúng) hoặc ít hơn giá trị tối đa của kiểu dữ liệu (cho sai) sẽ làm điều đó.

nên một cái gì đó như thế này:

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


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

Thật vậy, đó sẽ là gợi ý của tôi quá giả sử nó phôi ok. – Ian

+3

BitArray là một loại. Nó không phải là một 'int'. –

+0

Vâng, nhưng như bạn đã nói thực sự không phải là một cách để kiểm tra các giá trị mà không làm một vòng lặp. Tôi chỉ cung cấp một cách kiểm tra một mảng bit, không nhất thiết phải sử dụng kiểu BitArray. – kemiller2002

1

Indexing vào BitArray và kiểm tra boolean giá trị cá nhân là một giải pháp rõ ràng. Nếu bạn quan tâm đến hiệu suất, trước hết bạn nên cân nhắc tạo ra sự trừu tượng của riêng bạn, nhưng nếu bạn thích sử dụng BitArray cho hầu hết các hoạt động của mình, thì bạn có thể thực hiện kiểm tra bằng cách sử dụng CopyTo đến một số int[] có kích thước phù hợp (Count >> 5) và sau đó thực hiện kiểm tra không hoặc không bằng 0 trên các int này khi thích hợp.

2

Nếu bạn đang sử dụng lớp BitArray từ System.Collections, bạn có thể sử dụng mã sau đây để xác định xem có điều gì là đúng hay không.

C# phiên bản

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

VB.Net Version

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

Bất kỳ lợi thế nào trong việc không đi với 'đơn giản hơn. '(Đúng)' thay vì 'Bất kỳ'? Trên thực tế, đây là cách tôi đã làm điều đó ban đầu, nhưng 'Contains' đến tâm trí và tôi đã thay đổi nó như tôi không thể tìm thấy bất kỳ lý do cụ thể. Ý tưởng? –

Các vấn đề liên quan