假设我有一个填充了布尔值的数组,我想知道有多少元素是真的。
private bool[] testArray = new bool[10] { true, false, true, true, false, true, true, true, false, false };
int CalculateValues(bool val)
{
return ???
}
如果val为真,则CalculateValues应返回6,如果val为假,则返回4。
明显的解决方案:
int CalculateValues(bool val)
{
int count = 0;
for(int i = 0; i<testArray.Length;i++)
{
if(testArray[i] == val)
count++;
}
return count;
}
是否有“优雅”的解决方案?
答案 0 :(得分:42)
return testArray.Count(c => c)
答案 1 :(得分:31)
使用LINQ。您可以testArray.Where(c => c).Count();
进行真实计数,或使用testArray.Where(c => !c).Count();
进行错误检查
答案 2 :(得分:12)
您可以使用:
int CalculateValues(bool val)
{
return testArray.Count(c => c == val);
}
这会根据您的true
参数处理false
和val
项检查。
答案 3 :(得分:2)
尝试这样的事情:
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);
答案 4 :(得分:1)
虽然testArray.Count(c => c)
在功能上是正确的,但它并不直观,并且有一些后来的开发人员会发现c => c
部分认为它没有做任何事情的风险。
可以通过使用有意义的名称单独声明lambda函数来解决这个问题:
Func<bool, bool> ifTrue = x => x;
return testArray.Count(ifTrue);
答案 5 :(得分:-2)
我喜欢这个:
int trueCount = boolArray.Sum( x => x ? 1 : 0 ) ;