使用 LINQ 比较两个列表,并检索不同的项
本文关键字:检索 列表 两个 比较 LINQ 使用 | 更新日期: 2023-09-27 18:32:06
假设我有以下对象foo
及其属性如下:
class foo
public string name
public string property1
public string property2
现在让我们实例化两个foo
列表: List<foo>()
第一个列表包含两个foo
对象:
new foo() =
{
name = "name",
property1 = "random value",
property1 = "random value"
}
new foo() =
{
name = "name",
property1 = "random value",
property1 = "random value"
}
第二个列表包含一个foo
对象:
new foo() =
{
name = "name",
property1 = "random value",
property1 = "random value"
}
是否可以使用 LINQ 比较并返回包含这两个列表(或任何其他列表)之间差异的新List<foo>
?考虑到项目顺序和任何不匹配的属性值也被视为差异。
这对基元对象很有帮助:使用 linq 逐项比较两个列表,但不提供返回具有差异的新列表的方法。
编辑
@CSharpie重新开放...同样,现在的问题看起来定义得很差 - 即 {1,2,3,4} 和 {1,3,4} 的预期结果是什么?可能OP正在寻找某种差异。
@AlexeiLevenkov 输出应为 2。或者对于 {1,2,3,4} 和 {1,3,2, 4} 的列表,输出应为 {3,2},因为 3 和 2 的顺序(或值)已与原始列表更改。
尝试使用 Except LINQ 方法:
List<int> a = new List<int>{ 1, 2, 5 };
List<int> b = new List<int>{ 2, 3};
var result = a.Except(b).Union(b.Except(a)).ToList();
在集合论中,(A-B)+(B-A)
等价于两者之间的差异。