如何在列表的每个数组中计算等于0
的元素?
我有一个列表List<byte[]> piks
。
我想计算每个byte[]
有多少元素等于0
。
我尝试了几种方法:
from c in piksle_lista_tablic[84]
where (c.Equals(0))
select c
或
piksle_lista_tablic[84].Count(n => n == 0)
我总是收到错误Expression cannot contain lambda expressions
。
例如:
piks[1]
是一个包含1156
项的数组,我想知道该数组中有多少具体元素。
PS:我可以在观察窗口使用Linq吗?
答案 0 :(得分:6)
var results = from arr in piks
select arr.Where(b=>b==0).Count()
该代码将迭代数组列表,并且对于每个数组,找到等于零的元素,并返回具有每个数组的计数的IEnumerable。我喜欢的地方数量超过伯爵(选择器),但这是一个品味的问题。我怀疑表现会有明显的差异
给你ps 1是的,你可以在调试时使用linq,但这通常很痛苦,因为linq语句是一种语句,在方法中将其切断有时可以帮助调试,但我不喜欢为调试器编写代码。
修改强> 根据你的评论:不,你不能在观察窗口中使用Lambda。您可以在监视窗口中使用Linq,但仅作为方法调用,并且仅使用命名函数
答案 1 :(得分:4)
试试这个:
var zero_counts = piks.Select(p => p.Count(c => c == 0));
PS1。我可以尝试在调试时使用linq吗?
Visual Studio在监视窗口中不支持lambda表达式。
答案 2 :(得分:1)
如果您想计算全局总数,可以这样做:
piks.SelectMany(p => p).Count(p => p == 0);
对于每个阵列,您可以执行此操作:
piks.Select(p => p.Count(p => p == 0));
答案 3 :(得分:1)
List<byte[]> piks;
// Fill piks...
int zeroValuesCount = 0;
foreach (var pik in piks) {
zeroValuesCount += pik.Count(x => x == 0);
}