Рассчитать количество истинных (или ложных) элементов в массиве bool?

Предположим, у меня есть массив, заполненный логическими значениями, и я хочу знать, сколько элементов истинно.

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

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

CalculateValues ​​должен возвращать 6, если val равен true, или 4, если val равен false.

Очевидное решение:

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

Есть ли "элегантное" решение?

6 ответов

Решение

Используйте LINQ. Ты можешь сделать testArray.Where(c => c).Count(); for true count or use testArray.Where(c => !c).Count(); for false check

return testArray.Count(c => c)

Ты можешь использовать:

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

Это обрабатывает true а также false чеки, основанные на вашем val параметр.

В то время как testArray.Count(c => c) функционально корректен, не интуитивен и есть риск, что какой-то более поздний разработчик лишит его c => c частично думая, что это ничего не делает.

Это можно описать, объявив лямбда-функцию отдельно со значимым именем:

Func<bool, bool> ifTrue = x => x;
return testArray.Count(ifTrue);

Попробуйте что-то вроде этого:

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);

Мне это нравится:

int trueCount = boolArray.Sum( x  => x ? 1 : 0 ) ;
Другие вопросы по тегам