как сравнить два массива объектов - PullRequest
3 голосов
/ 15 декабря 2009

У меня есть объект с именем Person . Он имеет свойства Первый, последний, возраст и т. Д. , .

У меня есть два массива объектов Person.

Я хочу, чтобы какая-то функция принимала два массива

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

и пусть он выплюнет два новых массива

Person[] peopleinFirstListandNotSecond
Person[] peopleinSecondListandNotFirst

Так как это не строковые массивы, я бы хотел сделать сравнение по имени, фамилии и возрасту, чтобы определить, является ли это тот же человек

Ответы [ 3 ]

7 голосов
/ 15 декабря 2009

Вот функция linq (IEnumerable<T>.Except(...)), которая будет делать то, что вам нужно.

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

5 голосов
/ 15 декабря 2009

Можно написать компаратор (реализовать интерфейс IEqualityComparer ), а затем использовать его с методом расширения Кроме , как отмечали другие авторы.

Или вы можете просто сделать сравнение в лямбде, например

var peopleinFirstListAndNotSecond =     
    firstList.
    Where( p => 
            !secondList.Any( s => 
                s.Age == p.Age && 
                s.FirstName == p.FirstName && 
                s.SecondName == p.SecondName
         ) 
    );
0 голосов
/ 15 декабря 2009

Реализация IComparable (см. SO: IComparable и равно ), а затем цикл по каждому списку, создание необходимых двух списков вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...