【问题标题】:LINQ .Any() iterator for 2D Array - [,] [duplicate]LINQ .Any() 用于 2D 数组的迭代器 - [,] [重复]
【发布时间】:2015-06-19 05:59:14
【问题描述】:

LINQ 处理 2D 数组 的正确方法是什么?

int[,] array =
{
    { 1, 2, 3 },
    { 4, 5, 6 },
    { 7, 8, 9 }
};

bool anyZeroes = array.Any(value => value == 0)     // example

在这种情况下,我想检查数组中的任何变量是否与Func== 0 匹配。我如何使用 Any 来实现这一点,这里的最佳做法是什么?

【问题讨论】:

  • 该代码是否可以编译,还是应该表明您的意图?
  • 这就是我想要的写法。
  • 好的。我很确定它不起作用,因为你得到的矢量样式数组(2D,无论你想怎么称呼它)都没有实现IEnumerable<T>,这意味着它不可能。
  • 是的......它重复的问题解释了。我个人只是完全避免使用[ , ] 类型的数组。我从未见过比List<T[]> 或数组数组更合适或更有用的示例。
  • 当你有一个固定大小的“网格”时,比如在 2D 棋盘游戏中,你还应该使用什么? List 误导性地暗示可以添加项目,这将导致未定义的行为。

标签: c# arrays linq


【解决方案1】:

这是一种可以将列表展平以进行检查的方法

bool anyZeroes = array.Cast<int>().Any(value => value == 0);// false
bool anyNines = array.Cast<int>().Any(value => value == 9);// true

不过,如果您要拨打多个电话,您应该存储它:

bool casted = array.Cast<int>();
bool anyZeroes = casted.Any(value => value == 0);// false
bool anyNines = casted.Any(value => value == 9);// true

参考:https://stackoverflow.com/a/13822900/526704

【讨论】:

  • 哇,好简单!为什么我自己没有想到这一点?谢谢:D
  • 多调光阵列能够如此轻松地“展平”,这对我来说有点违反直觉。我最初认为它更像是一个List&lt;List&lt;T&gt;&gt;,并试图在它上面做一个SelectMany(),但这不起作用。我猜Cast&lt;T&gt;() 只是把它变成了IEnumerable LINQ 可以更好地处理
猜你喜欢
  • 2011-12-16
  • 1970-01-01
  • 2013-12-08
  • 2011-07-06
  • 1970-01-01
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多