计算布尔数组中真(或假)元素的数量?
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 => c).Count();
进行真实计数或使用testArray.Where(c => !c).Count();
进行错误检查
【讨论】:
虽然想法相同,但使用 count 条件重载的以下答案更清晰。【参考方案3】:你可以使用:
int CalculateValues(bool val)
return testArray.Count(c => c == val);
这会根据您的 val
参数处理 true
和 false
检查。
【讨论】:
【参考方案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 => c)
在功能上是正确的,但它并不直观,并且存在一些后来的开发人员会删除c => 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 => x)
更加简洁明了
根据文档,Count()
“返回序列中元素的数量。”这将为您提供数组或IEnumerable<T>
中元素的数量,而不管元素的值:您需要在应用Count()
之前使用Where()
过滤序列.
集合上的.Count()
方法可以,是的。 LINQ 中的.Count
扩展方法可以带一个过滤器:msdn.microsoft.com/en-us/library/bb534807(v=vs.110).aspx以上是关于计算布尔数组中真(或假)元素的数量?的主要内容,如果未能解决你的问题,请参考以下文章