如何比较两个对象数组
问题描述:
我有一个对象叫人。它有属性首先,最后,年龄等。 。 。我有两个Person对象数组。如何比较两个对象数组
我希望有一些功能需要两个阵列
Person[] firstlist = . .
Person[] secondList = . .
,并把它吐出了两个新的阵列
Person[] peopleinFirstListandNotSecond
Person[] peopleinSecondListandNotFirst
因为这些都不是字符串数组,我希望做一个比较对姓名和年龄进行确定,以确定其是否属于同一个人
答
这是一个linq函数(IEnumerable<T>.Except(...)
),它可以满足您的需求。
答
通过每个列表实现IComparable(见SO: IComparable and Equals),然后循环,建设所需要的两个输出列表。
+0
Linq会为你做这个。 – 2009-12-15 13:31:07
答
您可以编写一个比较器(实现IEqualityComparer interface),然后将其与Except扩展方法一起使用,如其他海报注意到的。
或者,你可以只是做拉姆达如
var peopleinFirstListAndNotSecond =
firstList.
Where(p =>
!secondList.Any(s =>
s.Age == p.Age &&
s.FirstName == p.FirstName &&
s.SecondName == p.SecondName
)
);
,实际上是真棒内的比较。 – 2009-12-15 13:24:07
@Alex - LINQ非常棒。 – 2009-12-15 13:28:05
您应该补充一点,他需要通过实现比较器或者在lambda内进行比较来比较对象是否相等。除了它本身不会解决问题。 – 2009-12-15 13:29:43