我有一个名为人的对象。它具有 First,Last,Age 等属性。 。
我有两个Person对象数组。
我想要一些函数来取两个数组
Person[] firstlist = . .
Person[] secondList = . .
让它吐出两个新阵列
Person[] peopleinFirstListandNotSecond
Person[] peopleinSecondListandNotFirst
由于这些不是字符串数组,我想对名字和姓氏进行比较以确定它是否是同一个人
答案 0 :(得分:7)
这是一个linq函数(IEnumerable<T>.Except(...)
),可以满足你的需要。
答案 1 :(得分:5)
您可以编写一个比较器(实现IEqualityComparer interface),然后将其与Except扩展方法一起使用,正如其他海报所述。
或者,您可以在lambda中进行比较,例如
var peopleinFirstListAndNotSecond =
firstList.
Where( p =>
!secondList.Any( s =>
s.Age == p.Age &&
s.FirstName == p.FirstName &&
s.SecondName == p.SecondName
)
);
答案 2 :(得分:0)
实施IComparable(请参阅SO: IComparable and Equals),然后遍历每个列表,构建所需的两个输出列表。