计算List <array> </array>的每个数组中的元素

时间:2011-10-27 20:17:30

标签: c# linq list

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

4 个答案:

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