2009-10-20 28 views
2

我有一個名單,其中MyClass有一個屬性'名稱'。我想知道列表中是否有重複的MyClass具有相同的名稱。如何找出一個列表中是否有重複項與另一個列表?

另外,我有一個不同的列表,我想知道是否有任何重複比較列表A.

+0

哪個版本的.NET,您使用哪個VS版本? – 2009-10-20 05:06:05

+1

沒有搜索結果有幫助?我確信這已被多次詢問。 http://stackoverflow.com/search?q=list+duplicates+c%23 – 2009-10-20 05:07:42

+0

@Matt:我想你回答了你自己的問題,如果你能做的只是將我指向一個通用的搜索術語而不是重複的。但是,不,我看,最接近的是從列表中刪除重複項,而不是2個列表的比較。 – esac 2009-10-20 16:18:36

回答

6

要回復第一個問題

我想知道如果有重複 MyClass的與在 列表相同的名稱。

,你可以這樣做:

bool hasDuplicates = 
    listA.Count != listA.Select(c => c.Name).Distinct().Count(); 

在回答第二個問題

另外,我有一個不同的列表和我 想知道是否有任何 重複相比,列表A.

你可以這樣做:

bool hasDuplicates = 
    differentList.Select(c => c.Name).Intersect(listA.Select(c => c.Name)).Any(); 
+0

我需要一個自定義比較器的第一個anser? – SoftwareSavant 2013-04-25 14:09:34

+0

什麼部分?如果您沒有提供IEqualityComparer ,則Distinct調用將使用EqualityComparer 。默認內部。這裏描述默認值:http://msdn.microsoft.com/en-us/library/ms224763.aspx。 – 2013-04-26 03:14:40

2

內一個List<MyClass>list檢查重複的名稱:

var names = new HashSet<String>(); 
foreach (MyClass t in list) 
    if(!names.Add(t.Name)) 
     return "Duplicate name!" 
return "No duplicates!" 

或變視當有/沒有重複時你想要做什麼。對於兩個單獨列表的情況,只需從一個列表中構建names集合,並在另一個列表中循環使用這種類型的檢查(具體取決於在第一個列表中僅在第二個列表內重複名稱的情況,或者只是在一個列表和另一個列表之間,當每個列表與其他列表單獨考慮時沒有重複的情況下 - 您的規格太不精確,無法讓我猜測您希望或希望在各種可能的組合中使用哪種列表方式!

+0

提及HashSet +1。謝謝:) – 2009-10-20 05:54:49

+0

@Mahesh,不用客氣 - 哈希表是非常通用的工具(儘管我可以看到@ gwiz的特定.NET答案,當然這個基於哈希的方法是非常廣泛的便攜式;-)。 – 2009-10-20 06:11:33

+0

HashSet確實很甜。提問者將它標記爲C#,這樣我就可以看到IMHO是阻力最小,可讀性最好的C#路徑。我沒有聲稱它的性能=) – 2009-10-20 06:58:33

相關問題