Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq基于字段比较查询两个数组的差异_C#_Arrays_Linq - Fatal编程技术网

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

C# Linq基于字段比较查询两个数组的差异,c#,arrays,linq,C#,Arrays,Linq,我想使用Linq根据每个列表中的不同字段比较两个列表的值,其中列表项值是字符串[]数组 数组的格式如下所示: 数组1 名单 每个字符串[]条目有4个字段 阵列2 名单 每个字符串[]有15个字段 我试图比较数组1中字段0的值,以检查该值是否存在于数组2中字段12的任何记录中,并返回数组2中未找到匹配项的数组1记录 到目前为止,我得到的是: var r = array1.Where( p => array2.All( p2 => p2[12] != p[0] ) ).ToLis

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

数组的格式如下所示:

数组1
  • 名单
  • 每个
    字符串[]
    条目有4个字段
阵列2
  • 名单
  • 每个
    字符串[]有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来比较子值。

p现在不是数组。使用:

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

我用你的代码描述做了一个例子,效果很好。 你能检查一下你的数组大小是否正确吗

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
}
private static void Main(字符串[]args)
{
var array1=新列表
{
新[]{“1”、“2”、“3”、“4”},
新[]{“A”、“B”、“C”、“D”}
};
var array2=新列表
{
新【】{“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“11”、“12”、“13”、“14”},
新【】{“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(z,Console.WriteLine));
//输出:
// 1
// 2
// 3
// 4
//A
//B
//C
//D
}

数组1字段0的比较在哪里,因为数组1包含4个字段。是的,我错过了。但问题肯定出在p2[12]或p[0]中。我猜不是数组中的所有元素都有相同数量的值。我建议您检查数组中的元素。您还可以将元素设置为类,以确保它们共享相同的模式。您可以使用
Any
而不是
All
某些数组对您的规则无效。(列表中的元素太少)这是最大的问题,不是您的查询。
array1
array2
的类型是什么。请不要只解释代码!嵌套循环将是
O(n^m)
<代码>所有
其中
也是O(n),因此它们将执行same@M.kazemAkhgary谢谢你批改数学题。我知道这是一个指数,只是不是精确的公式。关于这个问题,我确实解决了--我将4数组传递给数组2,将12数组传递给数组1。因此,上面的代码实际上可以运行XD/facepalm。我在上面也提到了这一点。代码是有效的,只是我将错误的数组传递给了包含此代码的方法。除息的。我的函数的格式是:短数组,长数组。但是我通过了:长数组,短数组。@SamuelJackson但是请仔细检查代码的逻辑。我不明白你到底想比较什么,你希望从中得到什么。如果您可以提供一些业务逻辑和更多的代码(不仅仅是描述),也许社区可以提供更好的反馈(例如,关于LINQ优化),我对此表示感谢。我无法提供数据样本,因为它包含私人信息。我比较的是查看发送给银行的付款文件中是否存在一份报告中的帐户id列表。付款文件采用固定长度格式,第一份报告采用csv格式。我可以转换所有数据,去掉信息以使比较更容易,但是我仍然需要返回数据,并且仍然需要递归比较。这就是林克真正闪耀的地方。