【问题标题】:Count elements in each array of a List<Array>计算 List<Array> 的每个数组中的元素
【发布时间】:2011-10-27 20:17:30
【问题描述】:

如何计算列表的每个数组中等于 0 的元素?

我有一个列表List&lt;byte[]&gt; 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 吗?

【问题讨论】:

    标签: c# linq list


    【解决方案1】:
    var results = from arr in piks
                  select arr.Where(b=>b==0).Count()
    

    该代码将迭代数组列表,并为每个数组找到等于 0 的元素并返回一个 IEnumerable,其中包含每个数组的计数。我更喜欢 where 计数而不是 Count(selector) 但这只是个人喜好问题。我怀疑在性能方面会有明显的差异

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

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

    【讨论】:

    • 这段代码在调试中不起作用,我试过了。但是谢谢,问题出在我的方法上:)
    • @Cooldown4seconds 它将在调试中工作您是在谈论监视窗口/立即窗口吗?如果是这样,那么你是对的,你不能在那里使用 lambda 表达式
    【解决方案2】:

    试试这个:

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

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

    Visual Studio 不支持监视窗口中的 lambda 表达式。

    【讨论】:

    • 每次 我都会看到不同的答案 :)
    • 是的,调试呢?我可以写那个代码吗?虽然粘贴我不能比...p=&gt;p intelisense 写得更远,但没有给出任何建议。我粘贴了类似的内容:'piksle_lista_tablic[84].Select(p => p.' 并且没有任何建议。所以..我可以在手表的调试模式下使用它吗?
    • 不支持,嗯 :( 好的,谢谢 :P 我虽然如果我在调试中编写它也可以在非 :X 中工作
    • @Cooldown4seconds:快速监视窗口对于 Linq 来说很糟糕,除非在非常有限的情况下,否则您将无法使用它来帮助您编写 Linq 查询。不确定,但即时窗口可能有同样的问题,尽管您可以尝试一下。你也可以试试LinqPad,不过除非你掏出现金,否则它不会给你智能感知。
    【解决方案3】:
    List<byte[]> piks;
    // Fill piks...
    int zeroValuesCount = 0;
    foreach (var pik in piks) {
        zeroValuesCount += pik.Count(x => x == 0);
    }
    

    【讨论】:

      【解决方案4】:

      如果要统计全局总数,可以这样做:

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

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

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

      【讨论】:

      • 全局不是问题,我想要每个数组:) 但也谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-14
      • 1970-01-01
      • 2019-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多