2009-12-15 138 views
2

我有一个对象叫。它有属性首先,最后,年龄等。 。 。我有两个Person对象数组。如何比较两个对象数组

我希望有一些功能需要两个阵列

Person[] firstlist = . . 
Person[] secondList = . . 

,并把它吐出了两个新的阵列

Person[] peopleinFirstListandNotSecond 
Person[] peopleinSecondListandNotFirst 

因为这些都不是字符串数组,我希望做一个比较对姓名和年龄进行确定,以确定其是否属于同一个人

回答

4

这是一个linq函数(IEnumerable<T>.Except(...)),它可以满足您的需求。

http://msdn.microsoft.com/en-us/library/bb336390.aspx

+0

,实际上是真棒内的比较。 – 2009-12-15 13:24:07

+0

@Alex - LINQ非常棒。 – 2009-12-15 13:28:05

+1

您应该补充一点,他需要通过实现比较器或者在lambda内进行比较来比较对象是否相等。除了它本身不会解决问题。 – 2009-12-15 13:29:43

0

通过每个列表实现IComparable(见SO: IComparable and Equals),然后循环,建设所需要的两个输出列表。

+0

Linq会为你做这个。 – 2009-12-15 13:31:07

4

您可以编写一个比较器(实现IEqualityComparer interface),然后将其与Except扩展方法一起使用,如其他海报注意到的。

或者,你可以只是做拉姆达如

var peopleinFirstListAndNotSecond =  
    firstList. 
    Where(p => 
      !secondList.Any(s => 
       s.Age == p.Age && 
       s.FirstName == p.FirstName && 
       s.SecondName == p.SecondName 
     ) 
    );