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

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

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

Код выдает "2", что, логично, а хотелось бы, чтобы выдавал "1", так как содержание словарей одинаковое. Подскажите, пожалуйста, желательно, максимально быструю и удобную реализацию интерфейса IEqualityComparer для сравнения двух Dictionary<string,string>.
            HashSet<Dictionary<string, string>> hs = new HashSet<Dictionary<string, string>>(/*здесь нужен правильный  IEqualityComparer*/);
 
            Dictionary<string, string> dic = new Dictionary<string, string>();
            dic.Add("Номер", "111");
            
            Dictionary<string, string> dic2 = new Dictionary<string, string>();
            dic2.Add("Номер", "111");

            hs.Add(dic);
            hs.Add(dic2);
 
            MessageBox.Show(hs.Count.ToString());
И вообще, я на правильном пути?
Пока остановился на этом, вроде работает. Покритикуйте, кому не жалко, код.
        public class DictionaryStrStrComparer : IEqualityComparer<Dictionary<string,string>>
        {
           
            public bool Equals(Dictionary<string,string> D1, Dictionary<string,string> D2)
            {
              return GetHashCode(D1)==GetHashCode(D2);  
            }

            public int GetHashCode(Dictionary<string,string> D)
            {
                string AllFromDict = string.Join("", D.Keys.ToArray()) + string.Join("", D.Values.ToArray());             
                
                return AllFromDict.GetHashCode();
            }
        }
 
        HashSet<Dictionary<string, string>> hs = new HashSet<Dictionary<string, string>>(new DictionaryStrStrComparer());
 
        Dictionary<string, string> dic = new Dictionary<string, string>();
        dic.Add("Номер", "111");
            
        Dictionary<string, string> dic2 = new Dictionary<string, string>();
        dic2.Add("Номер", "111");

        hs.Add(dic);
        hs.Add(dic2);
 
        MessageBox.Show(hs.Count.ToString());

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

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

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


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

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

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