Если вам нужна идеальная хеш-функция (разное значение для каждого объекта, которая оценивается как равная) или просто очень хорошая, это всегда компромисс производительности, обычно для вычисления хорошей хеш-функции требуется время, и если ваш набор данных мал, вы лучше с быстрой функцией. Самым важным (как указано в вашем втором посте) является правильность, и для достижения этого все, что вам нужно, это вернуть длину массива. В зависимости от вашего набора данных, это может быть даже хорошо. Если это не так (скажем, все ваши массивы одинаково длинные), вы можете пойти с чем-то дешевым, например, посмотреть на первое и последнее значение и XOR их значения, а затем добавить больше сложности, как вы считаете нужным для ваших данных.
Быстрый способ увидеть, как ваша хеш-функция работает с вашими данными, - это добавить все данные в хеш-таблицу и подсчитать, сколько раз вызывается функция Equals, если слишком часто у вас есть больше работы над этой функцией. , Если вы делаете это, просто имейте в виду, что размер хеш-таблицы должен быть больше, чем ваш набор данных при запуске, в противном случае вы собираетесь перефразировать данные, что вызовет повторные вставки и большее количество оценок Equals (хотя, возможно, более реалистично?)
Для некоторых объектов (не для этого) быстрый код HashCode может быть сгенерирован ToString (). GetHashCode (), конечно, не оптимален, но полезен, так как люди склонны возвращать что-то близкое к идентичности объекта из ToString () и это именно то, что ищет GetHashcode
Общая информация: худшая производительность, которую я когда-либо видел, была, когда кто-то по ошибке возвратил константу из GetHashCode, хотя это легко обнаружить с помощью отладчика, особенно если вы выполняете много операций поиска в своей хеш-таблице