я следующий класс:GetHashCode для аналогичных значений
public class Foo
{
int year;
string name;
int category;
}
Вот несколько примеров данных:
2012 Test1 1000
2012 Test2 1000
2012 Test3 1000
2012 Test4 1000
2012 Test4 10
...
Если я переопределить GetHashCode все результаты очень похож:
return year^name^category;
int hash = 13;
hash = hash * 33 + year.GetHashCode();
hash = hash * 33 + name.GetHashCode();
hash = hash * 33 + category.GetHashCode();
return hash;
Что такое хорошая хэш-функция (с максимальным распределением) для этой ситуации?
Редактировать: Возможно, мое понимание хэш-ковшей ошибочно. Переместить похожие значения хэша в одно и то же ведро?
"Test1".GetHashCode() --> -1556460260
"Test2".GetHashCode() --> -1556460257
Хотя что реализация 'GetHashCode' может быть улучшаемой, я бы сказал, что это нормально для хэша-кода быть похожей, так как объекты похожи, тоже! Вы, конечно, не можете вычесть плохое распределение из этого –
Почему 33? Я думаю, что общий выбор - это простое число (чего нет 33), хотя я не могу точно сказать, почему. – Dukeling
Почему вы заинтересованы в результатах, похожих на похожие? Чего вы действительно пытаетесь достичь? –