Как сравнить массивы? - PullRequest
       0

Как сравнить массивы?

0 голосов
/ 21 января 2011

У меня есть класс Employee со свойствами Name и ID

У меня есть массив Employee [] A, другой массив Employee [] B. Как я могу сравнить два массива и удалить значения, неприсутствует в B от A?

Ответы [ 5 ]

7 голосов
/ 21 января 2011
var intersection = A.Intersect(B).ToArray();

Обратите внимание, что здесь используется значение по умолчанию IEqualityComparer<Employee>, которое будет просто эталонным сравнением, если вы не переопределите Equals и GetHashCode.В качестве альтернативы вы можете реализовать IEqualityComparer<Employee> и использовать перегрузку Intersect, которая принимает экземпляр IEqualityComparer<Employee>.

0 голосов
/ 21 января 2011
Employee[]  c = (from d in a where !b.Contains<Employee>(d) select d).ToArray<Employee>();
0 голосов
/ 21 января 2011

Для иллюстрации предложения Джейсона (сравнение на основе идентификаторов):

class IDEmployeeComparer : IEqualityComparer<Employee>
{
    public bool Equals(Employee first, Employee second)
    {
      return (first.ID == second.ID);
    }

    public int GetHashCode(Employee employee)
    {
       return employee.ID
    }
}

...

var intersection = A.Intersect(B, new IDEmployeeComparer ()).ToArray();

Библиотека мисов Джона Скита позволяет указывать встроенный компаратор без необходимости создания отдельного класса

0 голосов
/ 21 января 2011

Я думаю, что вы можете найти вдохновение от http://msdn.microsoft.com/en-us/library/wdka673a.aspx или RemoveAll() метода.Вам нужно будет поместить массивы в списки, но это не должно вас озадачивать ...

0 голосов
/ 21 января 2011

Можете ли вы использовать System.Collections.Generic?

Я бы сделал что-то вроде:

var listA = new List<Employee>(A);
var listB = new List<Employee>(B); //not sure if arrays implement contains, may not need this line

A = listA.where(e => listB.Contains(e)).toArray();

Надеюсь, это поможет.

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