Рассчитать количество истинных (или ложных) элементов в массиве 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
Ты можешь использовать:
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 ) ;