c# - Linq根据字段比较查询两个数组的差异

标签 c# arrays linq

我想使用 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/

相关文章:

C:验证输入数组元素

c# - 使用未知类型动态构建 LINQ 表达式

javascript - 如何通过asp.net获取表单提交后的post数据

c# - 问题 SSL 证书 C#

python - 计算两个点阵列之间成对角度的矩阵

c# - Linq,如何指定时间戳条件?

c# - linq concat 是如何工作的?

c# - 存储大量分析数据

c# - 在 Xamarin Forms 中的选取器项上应用样式

javascript - Cordova/Phonegap - 当我关闭应用程序时存储一个数组(当我重新打开时使用它们)