2

n 個の GUID のリストがあり、それらを 1 つの値にハッシュする必要があります。この値は、Guid オブジェクトのサイズまたは Int32 のサイズである可能性があります。実際には問題ではありませんが、統計的に一意である必要があります (おそらく MD5 に似ているとします)。

したがって、1 つのアプローチは、それらを並べ替え、バイトを連結し、すべてのバイトの MD5 ハッシュを取得することですが、これはそれほど迅速ではありません。

別のアイデア: 構成オブジェクトの GetHashCode メソッドを、構成オブジェクトのハッシュ コードの XOR として実装することは、.NET ではかなり標準的な方法であることに気付きました。したがって、GUID のリストを XOR することは数学的に賢明でしょうか?

どんなアイデアでも大歓迎です!

4

2 に答える 2

2

セットに対してハッシュを有効にしたい場合(つまり、順序は関係ありません)、各 GUID のハッシュコードを XOR するのが適切な選択です。

実際にGUIDのシーケンスがあり、順序が重要な場合は、別の回答で書いたのと同じアプローチを使用することをお勧めします-加算/乗算を繰り返します。

(ハッシュコードを XOR しても、GUID 自体を XOR してから結果をハッシュするのと同じ答えはおそらく得られないことに注意してください。そうかもしれませんが、それは GUID.GetHashCode() の実装に依存します。各値をハッシュし、結果を一緒に XOR します - 他のことは別として、実装するのは簡単です。)

于 2008-11-14T16:29:31.823 に答える
0

GUID を XOR して結果をハッシュしないでください。GUID よりも小さいハッシュを使用しない限り、GUID を単純に XOR するよりも、この方法では何も得られません。

このためのパフォーマンスを本当に気にしているように見えるので、もう少し情報が役立ちます-特に、メモリ内にある GUID のさまざまな組み合わせを使用していますか (作成時に一度だけハッシュすることができます)。それとも、それらを読み込んで処理していて、GUID が繰り返される可能性は低いですか?

于 2008-11-14T16:50:13.623 に答える