2017-02-20 42 views
1

我是編程新手,但掌握了它。但我卡住試圖從字典列表打印重複,這給我以下錯誤。未能從字典列表中打印重複項

My Error Output

List<Dictionary<string, string>> Locations = new List<Dictionary<string, string>>(); 
     var stringinput = new Dictionary<string, string>(); 
     string xString = x.ToString(); 
     string yString = y.ToString();    
     stringinput.Add(xString, yString); 

     Locations.Add(stringinput); 

     var duplicates = Locations 
     .GroupBy(i => i) 
     .Where(g => g.Count() > 1) 
     .Select(g => g.Key); 

     foreach (var d in duplicates) 
      Console.WriteLine(d); 

[我的完整代碼] [2]

沒有任何一個有一個解決方案的任何想法或周圍的工作來打印這些重複?

http://pastebin.com/EhhELrdg

+2

這是因爲即使內容彼此相同,兩個字典對象也不會進行比較。 – dasblinkenlight

+0

你想找什麼標準重複? –

+0

在這裏發佈所有相關的代碼,外部鏈接腐爛。由於這個原因,問題必須獨立。 – weston

回答

0

您可以使用SelectMany從所有詞典弄平鍵 - 值對:

duplicates = locations.SelectMany(dict => dict) 
         .GroupBy(kv => kv.Key) 
         .Where(g => g.Count() > 1) 
         .Select(g => g.Key); 

您目前是按字典本身的分組。這不起作用,因爲Dictionary<tkey,tval>不覆蓋Equals + GetHashCode。你也不想查找重複的字典,但重複的鍵。

+0

謝謝你的回答。奇怪的輸出消失了,它變成0.什麼可能出錯? 或者當x與y相同時打印上面的代碼? 此代碼的目的是獲取已被「訪問」的重複位置。例如x34,y24已添加到列表x25,y34中,並且當x34,y24第二次添加到列表中時。 – CodeCommisaris

+0

@CodeCommisaris:好吧,在你當前的代碼中沒有重複 –

+0

你是對的,謝謝你的解決方案! – CodeCommisaris