Реализация интерфейса 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()));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д