2009-12-15 136 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 
     ) 
    );