计算bool数组中真(或假)元素的数量?

时间:2012-07-30 23:01:05

标签: c# arrays boolean

假设我有一个填充了布尔值的数组,我想知道有多少元素是真的。

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

是否有“优雅”的解决方案?

6 个答案:

答案 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参数处理falseval项检查。

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