Реализация интерфейса IEqualityComparer для HashSet> - C#

Узнай цену своей работы

Формулировка задачи:

Код выдает "2", что, логично, а хотелось бы, чтобы выдавал "1", так как содержание словарей одинаковое. Подскажите, пожалуйста, желательно, максимально быструю и удобную реализацию интерфейса IEqualityComparer для сравнения двух Dictionary<string,string>.
Листинг программы
  1. HashSet<Dictionary<string, string>> hs = new HashSet<Dictionary<string, string>>(/*здесь нужен правильный IEqualityComparer*/);
  2. Dictionary<string, string> dic = new Dictionary<string, string>();
  3. dic.Add("Номер", "111");
  4. Dictionary<string, string> dic2 = new Dictionary<string, string>();
  5. dic2.Add("Номер", "111");
  6.  
  7. hs.Add(dic);
  8. hs.Add(dic2);
  9. MessageBox.Show(hs.Count.ToString());
И вообще, я на правильном пути?
Пока остановился на этом, вроде работает. Покритикуйте, кому не жалко, код.
Листинг программы
  1. public class DictionaryStrStrComparer : IEqualityComparer<Dictionary<string,string>>
  2. {
  3. public bool Equals(Dictionary<string,string> D1, Dictionary<string,string> D2)
  4. {
  5. return GetHashCode(D1)==GetHashCode(D2);
  6. }
  7.  
  8. public int GetHashCode(Dictionary<string,string> D)
  9. {
  10. string AllFromDict = string.Join("", D.Keys.ToArray()) + string.Join("", D.Values.ToArray());
  11. return AllFromDict.GetHashCode();
  12. }
  13. }
  14. HashSet<Dictionary<string, string>> hs = new HashSet<Dictionary<string, string>>(new DictionaryStrStrComparer());
  15. Dictionary<string, string> dic = new Dictionary<string, string>();
  16. dic.Add("Номер", "111");
  17. Dictionary<string, string> dic2 = new Dictionary<string, string>();
  18. dic2.Add("Номер", "111");
  19.  
  20. hs.Add(dic);
  21. hs.Add(dic2);
  22. MessageBox.Show(hs.Count.ToString());

Решение задачи: «Реализация интерфейса IEqualityComparer для HashSet

textual
Листинг программы
  1. return dictionary.Aggregate(0, (current, pair) => current ^ ((pair.Key.GetHashCode()*397) ^ pair.Value.GetHashCode()));

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут