我有一个二维数组int[][] data
,我想查看该值是否包含值45
,例如
我创建了这行代码
bool contains = data.Where(x => x.Contains(45)).ToArray().Count() != 0 ? true : false;
但看起来有不必要的代码,我确信有更简单或更有效的方法来执行此操作
答案 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)
您的代码中存在两个问题:
data
不是 int
的数组,它是一个数组int[]
bool
条件并根据bool
值返回值。因此x ? true : false
与x
相同。操作员无需使用。那么(我假设)你想要的不是检查data
是否包含45
,而是{em> data
中的任何数组包含45 。因此,您要么使用SelectMany
将jagged数组展平为枚举,要么将两个Any
调用连接起来:
bool contains = data.SelectMany(d => d).Contains(45);
或
bool contains = data.Any(d => d.Contains(45);