2011-05-31 14 views
6

this例では、ポスターがgetハッシュコードメソッドをオーバーライドしました。私は、返されたオブジェクトに対してより良いハッシュ値を提供し、衝突の数を減らし、したがって、Equals()を呼び出す必要がある機会を減らすために、これが行われたことを理解しています。C#GetHashCodeメソッドをオーバーライドする

私が知りたいのですが何を、どのようにこのアルゴリズムが計算されている。

return 17 + 31 * CurrentState.GetHashCode() + 31 * Command.GetHashCode(); 

は、問題の番号が選ばれたという特別な理由はありますか?私はそれに入れるために自分の数字を選んだだけだろうか?

+1

MS C#コンパイラ(anon-types用)は、-1134271262のシードと-1521134295の乗数を使用します。ちょうど ' –

+0

@MarcGravell:あなたはそれのソースがありますか? – DeepSpace101

+0

@ DeepSpace101 ILDASM; p –

答えて

4

一般に、素数を選択する必要があります。これは、異なる入力パラメータに対して同じハッシュ値を取得することを避けるのに役立ちます。

1
:あなたはこのISTEに ハッシュコード素数を検索する場合、あなたはこの上でいくつかの詳細な説明を見つけることでしょう(それは特定のノート言語であることに注意してください)

通常、素数は、衝突の可能性を減らすため(同じ結果をもたらす2つのインスタンス)、上記のように使用します。詳細については、http://computinglife.wordpress.com/2008/11/20/why-do-hash-functions-use-prime-numbers/

関連する問題