2016-01-12 7 views
-1

Привет друзья Я хочу создать метод, который получит два списка точки (объекта, что я созданный) и вернуть 3 списка, которые включают в себя:Что это лучший способ, чтобы сравнить два списка сложного объекта в C#

  1. Точки, которые существуют в первом и втором списке.

  2. Точки, которые есть в первом списке и не существуют во втором списке.

  3. Точки, которые не существуют в первом и существуют во втором списке.

Что является лучшим ватом для этого?

Point.cs:

Public class Point {public int X; public int Y} 
+0

Если вам нужна информация об операции установки - https://code.msdn.microsoft.com/LINQ-Set-Operators-374f34fe. Более похожие ответы можно найти https://www.bing.com/search?q=C%23+items+exist+both+list. –

ответ

0

Вы можете сделать несколько вещей.

Первое использование System.Drawing.Point struct вместо вашего собственного класса, и вы также сможете сравнить его.

Во-вторых, если вам нужно создать свой собственный класс, то переопределите Equals и GetHashCode в своем классе.

+0

Я понимаю, что Linq сравнивается между HashCode, поэтому мне нужно, чтобы метод GetHash возвращал значение X и значение Y. Как я это делаю? – Lol

2

Сначала вам нужно создать IEqualityComparer<Point>. Затем используйте методы Intersect и Except Linq для достижения желаемого.

  1. var result = points1.Intersect (points2, yourComparer);
  2. var result = points1.Except (points2, yourComparer);
  3. var result = points2.Except (points1, yourComparer);

где points1 и points2 - ваш список пунктов.

Чтобы реализовать IEqualityComparer, refer this question как начало.

+0

1. Что такое yourComparer? 2. Как я конвертирую это в список? – Lol

+0

@Lol 1. yourComparer - это экземпляр 'IEqualityComparer ', который вы будете создавать (как это сделать, это последняя часть моего ответа). 2. 'var myList = points1.Intersect (points2, yourComparer) .ToList();'. Просто назовите 'ToList()' в конце. –

+0

Хорошо, еще один quastion: Я понимаю, что Linq сравнивается между HashCode, поэтому мне нужно, чтобы метод GetHash возвращал значение X и значение Y. Как я это делаю? – Lol