2010-08-10 58 views
1

在此帖子中Other Post我使用List<KeyValuePair<string, string>> IdentityLines = new List<KeyValuePair<string, string>>();的程序員建議來收集目錄中某些文件中的多個字符串值。我現在想要從該列表中刪除重複值。任何想法如何在C#中做到這一點?謝謝搜索並刪除列表中的重複項

+0

參見http://stackoverflow.com/questions/47752/remove-duplicates-from-a-listt-in- c – 2010-08-10 20:55:45

回答

2
static List<T> RemoveDuplicates<T>(List<T> inputList) 
{ 
    Dictionary<T, int> uniqueStore = new Dictionary<T, int>(); 
    List<T> finalList = new List<T>(); 

    foreach (string currValue in inputList) 
    { 
     if (!uniqueStore.ContainsKey(currValue)) 
     { 
      uniqueStore.Add(currValue, 0); 
      finalList.Add(currValue); 
     } 
    } 
    return finalList; 
} 

http://www.kirupa.com/net/removingDuplicates.htm

如果你想返回一個IEnumerable而是改變你的返回類型IEnumerable<T>yieldreturn currValue,而不是將它添加到最後名單。

+0

在該鏈接上發佈此行後列表 result = removeDuplicates(input);如果我想要寫入文本文件,foreach循環會是什麼樣子?這是我的猜測,但我得到一個錯誤上的foreach聲明不能類型字符串轉換爲System.Collections.Generic.List 的foreach(名單線結果) { 的StreamWriter FS = File.AppendText(@「C:\日誌\「+」UserSummary「+」.log「); fs.Write(lines.Value +「\ r \ n」); fs.Close(); } – Josh 2010-08-10 21:02:38

+0

我想你想'foreach(結果中的字符串s)',根據你提供的錯誤。 – 2010-08-10 21:05:07

+0

嗨羅伯特 - 如果我這樣做,那麼我怎麼寫s的價值? s沒有s.value,我可以在fs.Write()中使用; – Josh 2010-08-10 21:07:37

5

使用與Linq一起發現的Distinct方法。這裏是一個使用int列表的例子。

Using System.Linq;

List<int> list = new List<int> { 1, 2, 3, 1, 3, 5 }; 
List<int> distinctList = list.Distinct().ToList(); 
0

我知道這樣一個老問題,但在這裏就是我如何做到這一點:

var inputKeys = new List<KeyValuePair<string, string>> 
          { 
           new KeyValuePair<string, string>("myFirstKey", "one"), 
           new KeyValuePair<string, string>("myFirstKey", "two"), 
           new KeyValuePair<string, string>("mySecondKey", "one"), 
           new KeyValuePair<string, string>("mySecondKey", "two"), 
           new KeyValuePair<string, string>("mySecondKey", "two"), 
          }; 
var uniqueKeys = new List<KeyValuePair<string, string>>(); 

//get rid of any duplicates 
uniqueKeys.AddRange(inputKeys.Where(keyPair => !uniqueKeys.Contains(keyPair))); 

Assert.AreEqual(inputKeys.Count(), 5); 
Assert.AreEqual(uniqueKeys.Count(), 4);