【发布时间】:2016-11-09 10:37:53
【问题描述】:
我想使用 Linq 根据每个列表中的不同字段比较两个列表的值,其中列表项的值是一个字符串 [] 数组。
数组的格式如下:
数组 1
- 列表
- 每个
string[]条目 4 个字段
数组 2
- 列表
- 每个
string[]条目 15 个字段
我正在尝试比较数组 1 中字段 0 的值,以检查该值是否存在于数组 2 的字段 12 中的任何记录中,并返回数组 1 中没有在数组 2 中找到匹配项的记录。
到目前为止,我所拥有的是:
var r = array1.Where( p => array2.All( p2 => p2[12] != p[0] ) ).ToList();
这给了我以下错误:
“System.IndexOutOfRangeException”类型的未处理异常
我怎样才能做到这一点?我知道我可以做一个嵌套循环 O(n)^n,但这并不理想,这就是为什么我希望使用 Linq 来比较子值。
【问题讨论】:
-
您可以使用
Any而不是All -
某些数组对您的规则无效。 (列表中的元素太少) 这是最大的问题,而不是您的查询。
-
array1和array2的类型是什么。请不要只解释代码! -
嵌套循环将是
O(n^m)。All和Where也是 O(n),所以它们会执行相同的操作 -
@M.kazemAkhgary 感谢您纠正数学问题。我知道这是一个指数,而不是精确的公式。关于这个问题,我确实弄清楚了——我将 4 数组传递给数组 2,将 12 数组传递给数组 1。所以上面的代码实际上确实有效 XD /facepalm。