Реализация интерфейса 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()));