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

Posted

技术标签:

【中文标题】计算布尔数组中真(或假)元素的数量?【英文标题】:calculate number of true (or false) elements in a bool array? 【发布时间】:2012-07-28 16:14:19 【问题描述】:

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

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;

有没有“优雅”的解决方案?

【问题讨论】:

【参考方案1】:
return testArray.Count(c => c)

【讨论】:

【参考方案2】:

使用 LINQ。您可以使用testArray.Where(c =&gt; c).Count(); 进行真实计数或使用testArray.Where(c =&gt; !c).Count(); 进行错误检查

【讨论】:

虽然想法相同,但使用 count 条件重载的以下答案更清晰。【参考方案3】:

你可以使用:

int CalculateValues(bool val)

    return testArray.Count(c => c == val);

这会根据您的 val 参数处理 truefalse 检查。

【讨论】:

【参考方案4】:

试试这样的:

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

【讨论】:

【参考方案5】:

虽然testArray.Count(c =&gt; c) 在功能上是正确的,但它并不直观,并且存在一些后来的开发人员会删除c =&gt; c 部分认为它没有任何作用的风险。

这可以通过使用有意义的名称单独声明 lambda 函数来避免:

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

【讨论】:

【参考方案6】:

我喜欢这个:

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

【讨论】:

为什么要重新利用Sum 来执行Count 的功能? 因为它更简单、更简洁、更中肯。如果你喜欢Where()/Count(),你会得到相同的结果,但需要为每个数组元素调用额外的方法。 我想说int trueCount = boolArray.Count(x =&gt; x) 更加简洁明了 根据文档,Count()“返回序列中元素的数量。”这将为您提供数组或IEnumerable&lt;T&gt; 中元素的数量,而不管元素的:您需要在应用Count() 之前使用Where() 过滤序列. 集合上的.Count() 方法可以,是的。 LINQ 中的.Count 扩展方法可以带一个过滤器:msdn.microsoft.com/en-us/library/bb534807(v=vs.110).aspx

以上是关于计算布尔数组中真(或假)元素的数量?的主要内容,如果未能解决你的问题,请参考以下文章

如何计算 NumPy bool 数组中真实元素的数量

使用javascript获取数组中真/假值的数量

计算 Python 列表中真正布尔值的数量

计算linq中两个数组中相同元素的数量

给定这个数组数组,我如何计算其中包含重复元素的数组的数量?

如何使用 Diesel 计算数组列中不同元素的数量?