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