对List的每个数组中的元素计数

本文关键字:数组 元素 List Array | 更新日期: 2023-09-27 18:12:31

如何计算列表中每个数组中等于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吗?

对List<Array>的每个数组中的元素计数

var results = from arr in piks
              select arr.Where(b=>b==0).Count()

代码将迭代数组列表,并为每个数组找到等于0的元素,并返回一个IEnumerable,其中包含每个数组的计数。我更喜欢where count而不是count(选择器),但这是一个品味问题。我怀疑是否会有明显的性能差异

给你ps 1是的,你可以在调试时使用linq,但这通常是一种痛苦,因为linq语句是一个语句,在方法中分割它有时可以帮助调试,但我不喜欢为了调试器而编写代码。

编辑根据你的评论:不,你不能在观察窗口中使用Lambda。您可以在监视窗口中使用Linq,但只能作为方法调用,并且只能用于命名函数

试试这个:

var zero_counts = piks.Select(p => p.Count(c => c == 0));

ps1。我可以尝试在调试时使用linq吗?

Visual Studio在观察窗口中不支持lambda表达式。

  • VS调试" quick watch "工具和lambda表达式
List<byte[]> piks;
// Fill piks...
int zeroValuesCount = 0;
foreach (var pik in piks) {
    zeroValuesCount += pik.Count(x => x == 0);
}

如果您想计算全局总数,您可以这样做:

piks.SelectMany(p => p).Count(p => p == 0);

对于每个数组你可以这样做:

piks.Select(p => p.Count(p => p == 0));