2012-09-13 29 views
-6

我有這樣的代碼:我如何檢查列表<string>中的重複項?

private void test(List<string> a) 
{ 

} 

我想用在for循環的,並檢查是否有在列表中重複項 然後用空標記它。

+0

你是什麼意思「用空標記」? – Enigmativity

+2

你可能根本沒有發佈任何代碼,因爲你發佈的帖子是毫無意義的。投票結束這個「不是真正的問題」,因爲它表明自己沒有努力去解決問題,在發佈之前根本沒有研究。 –

回答

1

不知道你想在這裏做什麼,但如果你想先手在列表中的不同值的集合,你可以使用LINQ來做到這一點:通過串

var distinctOnes = a.Distinct(); 
0

環,並把在一個HashSet新的字符串,這樣就可以有效地檢查重複:

var set = new HashSet<string>(); 
for (int i = 0; i < a.Count; i++) { 
    if (set.Contains(a[i])) { 
    // duplicate 
    a[i] = null; 
    } else { 
    set.Add(a[i]); 
    } 
} 
0

你真的應該避免副作用Side Effects Answer方法。你可以達到你想要的東西是這樣的:

private List<String> test(List<String> originalList) 
{ 
    List<String> returnList = new ArrayList<String>(); 
    for (String value : originalList) 
    { 
     if (!returnList.contains(value)) 
     { 
      returnList.add(value); 
     } 
    } 
    return returnList; 
} 

您可以輕鬆地修改此方法來添加空,以及如果你真的想(而不是如果已經添加不添加任何東西)...

+0

而不是(特別低效的)方法,你可以使用'return originalList.Distinct()'; – Servy

0
private bool HasDuplicates(List<string> a) 
{ 
    return a.Distinct().Count() != a.Count(); 
} 
0

你可以使用LINQ

var list = (from n in a select n).Distinct().ToList(); 

所以知道你有一個獨特的列表,你可以對證「了」

+0

爲什麼你在查詢開始時有一個身份選擇?只需調用'list.Distinct()'。 – Servy