【问题标题】:check that int array contains !=0 value using lambda使用 lambda 检查 int 数组是否包含 !=0 值
【发布时间】:2010-05-26 19:24:46
【问题描述】:

我有一个二维数组

 List<List<int>> boardArray

如何枚举 throw 这个数组来检查它是否包含 0 以外的值? 我考虑 boardArray.ContainsForEach ,因为它返回 bool 值,但我对 lambda 表达式没有太多经验:/ 请帮忙:)

【问题讨论】:

  • 这不是一个区域,而是一个列表列表
  • 这不是一个数组 -.- 现在有实际问题的答案了吗?

标签: c# lambda multidimensional-array


【解决方案1】:

您要检查内部列表还是简单地检查整个事物的非零值?

boardArray.Any(list => list.Any(item => item != 0));
boardArray.Where(list => list.Any(item => item != 0));

第一行将返回真/假,指示外部列表中是否有任何具有非零值的列表。另一方面,第二行过滤包含非零项的列表。

【讨论】:

  • 谢谢,你的 lambda 是最快的。这是我正在寻找的 ;)
【解决方案2】:
if (!boardArray.SelectMany(list => list).All(i => i == 0)) {
  ...
}

SelectManyList&lt;List&lt;int&gt;&gt; 扁平化为一个整数序列,而All 检查每个元素是否匹配一个条件。

【讨论】:

  • 我喜欢你使用SelectMany,但是Anthony 使用Any 并检查非零优于使用All 并检查零。 Any 将在找到非零值后立即停止循环,而 All 将继续循环,即使它有足够的信息来回答问题“是否存在非零值?”
  • 它们完全相反,工作方式相同。 All 将在找到非零值后立即停止。所以All()!Any() 相同,Any()!All() 相同。如果您想自己看,请反射两个。
  • @Joel:Julien 在这里是正确的——All(i =&gt; i==0) 将在找到任何非零值后立即返回 false,与 Any(i =&gt; i!=0) 在同一位置返回 true。这里唯一的额外成本是单一的额外否定,这几乎不值得考虑。
  • 为脑放屁道歉。我想我正在查看 All 并考虑 Where/Count 情况。
【解决方案3】:

bool containsZero = (!boardArray.SelectMany(list =&gt; list).Any(i =&gt; i == 0))

这表示从 boardarray 中的所有项目循环遍历其中的所有项目,如果一个不为零则返回 false,那么我们正在反转该 false。

【讨论】:

    猜你喜欢
    • 2012-08-14
    • 2019-08-10
    • 1970-01-01
    • 2015-01-01
    • 2021-07-15
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多