Linq查询基于字段比较的两个数组的差异

本文关键字:两个 数组 查询 字段 Linq 比较 于字段 | 更新日期: 2023-09-27 18:17:00

我想使用Linq根据每个列表中不同的字段比较两个列表的值,其中列表项的值是一个字符串[]数组。

数组的格式如下:

数组1

  • 每个string[]条目4个字段

数组2

  • 每个string[]条目15个字段

我正试图比较数组1中字段0的值,以检查该值是否存在于数组2中字段12中的任何记录中,并返回数组2中没有匹配的数组1记录。

目前我所知道的是:

var r = array1.Where( p => array2.All( p2 => p2[12] != p[0] ) ).ToList();

这给了我以下错误:

类型为"System"的未处理异常。IndexOutOfRangeException '

我怎样才能使它工作?我知道我可以做一个嵌套循环O(n)^n,但这并不理想,这就是为什么我希望使用Linq来比较子值。

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
}

p现在不是数组。用途:

var r = array1.Where( p => array2.All( p2 => p2[12] != p ) ).ToList();