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

Опубликовать все соответствующие коды здесь, внешние ссылки rot. По этой причине вопросы должны стоять одни. – 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