检查2D数组内的值

时间:2016-08-08 08:42:04

标签: c# performance linq

我有一个二维数组int[][] data,我想查看该值是否包含值45,例如

我创建了这行代码

bool contains = data.Where(x => x.Contains(45)).ToArray().Count() != 0 ? true : false;

但看起来有不必要的代码,我确信有更简单或更有效的方法来执行此操作

3 个答案:

答案 0 :(得分:3)

您可以使用Any linq扩展名。

bool exists = data.SelectMany(x=>x).Any(x=>x == 45);

bool exists = data.Any(x=>x.Any(s=>s == 45));

答案 1 :(得分:3)

Array.IndexOf针对整数数组进行了优化,所以如果你的内部数组很长并且你关心加速那么多,那么可能值得这样做:

bool exists = data.Any(a => Array.IndexOf(a, 45) != -1);

答案 2 :(得分:2)

您的代码中存在两个问题:

  1. data 不是 int的数组,它是一个数组int[]
  2. 三元运算符采用bool条件并根据bool值返回值。因此x ? true : falsex相同。操作员无需使用。
  3. 那么(我假设)你想要的不是检查data是否包含45,而是{em> data中的任何数组包含45 。因此,您要么使用SelectMany将jagged数组展平为枚举,要么将两个Any调用连接起来:

    bool contains = data.SelectMany(d => d).Contains(45);
    

    bool contains = data.Any(d => d.Contains(45);