У меня был следующий код для генерации хэша объекта:
public int GetHashCode(MyType obj)
{
return (obj.Prop1.GetHashCode() + obj.Prop2.GetHashCode() + obj.Prop3.GetHashCode()).GetHashCode();
}
То есть. Я добавляю хеш-коды всех свойств, а затем беру хеш-коды.
В обзоре коллега предположил, что это будет конфликтовать слишком часто. Я не уверен, что это правда, потому что:
- Учитывая, что хэш-коды выбираются с равной частотой среди положительных и отрицательных чисел и они повторяются, я не думаю, что мы получаем какую-либо дополнительную информацию о вероятности этих чисел 'сумма в противоположность самим числам
- В той степени, в которой их сумма не случайна, хэш-коды предназначены для превращения чисел, которые "близко друг к другу", "далеко друг от друга", таким образом, подача неравномерно распределенного значения в функцию не должно быть проблемой
Кто прав?
Это на C #, если ответ зависит от языка.
задан Xodarap 8 June 2011 в 21:57
поделиться