我不知道我在哪里犯错,但是我无法比较(例如)整数列表的两个列表。
简单的例子:
List<List<int>> A = new List<List<int>>();
A.Add(new List<int>(new int[] { 1 }));
A.Add(new List<int>(new int[] { 2 }));
List<List<int>> B = new List<List<int>>();
B.Add(new List<int>(new int[] { 1 }));
if (A.Contains(B[0])){
Console.WriteLine("TRUE");
else{
Console.WriteLine("FALSE");
}
返回False。在这种情况下进行比较的正确方法是什么?我也尝试过Intersect
,Except
并且结果相同。
这可能有助于形象化:
A:
A[0]:
A[0][0]: 1
A[1]:
A[1][0]: 2
B:
B[0]:
B[0][0]: 1
当您打电话时A.Contains()
,您要询问要测试的对象是A[0]
还是A[1]
。由于您正在传递它B
,并且B
两者都不是,因此它返回false。即使您通过B[0]
或B[0][0]
,您仍然会得到假的,因为这些都不是或相同的对象。A[0]
A[1]
SequenceEqual()
是用于测试两个内容是否List
相同的函数。因此,您想测试一个A[0]
或A[1]
是否SequenceEqual
要B[0]
(即A[0][0] == B[0][0]
或者A[1][0] == B[0][0]
)。
最好的方法是使用LINQ函数.Any()
。A.Any(a => a.SequenceEqual(B[0]))
将测试的B[0]
所有内容A
。如果要比较所有 B
元素和所有 A
元素,则需要类似的东西A.Any(a => B.Any(b => a.SequenceEqual(b))
。可以将其翻译为:
foreach (var a in A) // A[0], A[1], etc.
{
foreach (var b in B) // B[0], B[1], etc.
{
// is our current a value matching the current b value?
// i.e. A[0] is exactly the same as B[0] on the first pass
if (a.SequenceEqual(b)) return true;
}
}
return false;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句