2016-01-12 106 views
-1

朋友你好我希望創建一個讓(我正在創建的對象)點的兩個列表的方法和返回3清單包括的最佳方式:什麼是比較複雜對象的兩個列表在C#

  1. 第一個和第二個列表中存在的點。

  2. 存在於第一個列表中且不存在於第二個列表中的點。

  3. 第一個不存在,第二個列表中存在的點。

什麼是最好的wat做那個?

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結構代替你自己的類,你也可以進行比較。其次,如果您必須創建自己的班級,則在班級中覆蓋EqualsGetHashCode

+0

我明白,Linq之間的HashCode比較,所以我需要的方法GetHash代碼返回X值和Y值。我如何做到這一點? – Lol

2

首先您需要創建一個IEqualityComparer<Point>。然後使用0123q和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.我如何將其轉換爲List? – Lol

+0

@Lol 1.yourComparer是您將要創建的「IEqualityComparer 」的實例(如何做到這一點是我答案的最後部分)。 2. var myList = points1.Intersect(points2,yourComparer).ToList();'。最後調用'ToList()'。 –

+0

好吧,另一個quastion:我明白,Linq之間的HashCode比較,所以我需要的方法GetHash代碼返回X值和Y值。我如何做到這一點? – Lol