2012-07-30 23 views
14

Giả sử tôi có một mảng chứa các giá trị Boolean và tôi muốn biết có bao nhiêu phần tử là đúng.tính toán số lượng các phần tử đúng (hoặc sai) trong một mảng bool?

private bool[] testArray = new bool[10] { true, false, true, true, false, true, true, true, false, false }; 

int CalculateValues(bool val) 
{ 
    return ??? 
} 

CalculateValues ​​sẽ trả về 6 nếu val là true hoặc 4 nếu val là false.

giải pháp rõ ràng:

int CalculateValues(bool val) 
{ 
    int count = 0; 
    for(int i = 0; i<testArray.Length;i++) 
    { 
     if(testArray[i] == val) 
      count++; 
    } 
    return count; 
} 

Có một "thanh lịch" giải pháp?

Trả lời

27

Sử dụng LINQ. Bạn có thể làm testArray.Where(c => c).Count(); cho đếm đúng hay sử dụng testArray.Where(c => !c).Count(); để kiểm tra sai

+4

Trong khi đó là ý tưởng tương tự, câu trả lời dưới đây bằng cách sử dụng quá tải có điều kiện đếm được sạch hơn. –

33
return testArray.Count(c => c) 
11

Bạn có thể sử dụng:

int CalculateValues(bool val) 
{ 
    return testArray.Count(c => c == val); 
} 

này xử lý các truefalse séc, dựa trên thông số val của bạn.

2

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

bool[] testArray = new bool[10] { true, false, true, true, false, true, true, true, false, false }; 
bool inVal = true; 
int i; 

i = testArray.Count(ai => ai == inVal); 
-2

Tôi thích video này:

int trueCount = boolArray.Sum(x => x ? 1 : 0) ; 
+1

Tại sao lại sử dụng 'Sum' để thực hiện chức năng' Đếm'? – Richard

+0

Bởi vì nó đơn giản, ngắn gọn hơn và cho điểm. Nếu bạn thích 'Where()'/'Count()', bạn nhận được kết quả tương tự với chi phí của một cuộc gọi phương thức bổ sung cho mỗi phần tử mảng. –

+1

Tôi muốn nói 'int trueCount = boolArray.Count (x => x)' là ngắn gọn hơn nhiều và đến điểm – Richard

1

Trong khi testArray.Count(c => c) là chức năng đúng, nó không phải là trực quan và có một nguy cơ rằng một số nhà phát triển sau này sẽ loại bỏ phần c => c nghĩ rằng nó không làm gì cả.

này có thể được derisked bằng cách tuyên bố chức năng lambda riêng với một tên có ý nghĩa:

Func<bool, bool> ifTrue = x => x; 
return testArray.Count(ifTrue); 
Các vấn đề liên quan