我想使用 Linq 根据每个列表中的不同字段来比较两个列表的值,其中列表项值是 string[] 数组。
数组的格式如下:
数组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();
这给了我以下错误:
An unhandled exception of type 'System.IndexOutOfRangeException'
我怎样才能做到这一点?我知道我可以做一个嵌套循环 O(n)^n,但这并不理想,这就是为什么我希望使用 Linq 来比较子值。
最佳答案
我用你的代码描述做了一个例子,它工作得很好。 您能检查一下您的数组大小是否正确吗?
private static void Main(string[] args)
{
var array1 = new List<string[]>
{
new[] {"1", "2", "3", "4"},
new[] {"A", "B", "C", "D"}
};
var array2 = new List<string[]>
{
new[] {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14"},
new[] {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N"}
};
var r = array1.Where(p => array2.All(p2 => p2[12] != p[0])).ToList();
r.ForEach(_ => Array.ForEach(_, Console.WriteLine));
// output:
// 1
// 2
// 3
// 4
// A
// B
// C
// D
}
关于c# - Linq根据字段比较查询两个数组的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40504934/