任意の数のデータ フィールドを取得し、それらを何らかの方法で組み合わせてハッシュ可能なオブジェクトにし、後でこのオブジェクトを辞書でハッシュして後で検索できるようにする必要があるメソッドを作成しました。
これまでのところ、私が思いついた最良のアルゴリズムは、各フィールドに ToHashCode() を使用し、結果のハッシュコードをある種の区切り文字 (「|」など) を使用して文字列に結合し、この結果の文字列を次のように使用することです。ディクショナリの一意のキー。
これを行うためのより効率的な方法を知っている人はいますか? 各フィールドのハッシュコードを取得し、それらを一意のハッシュ可能な数値に結合するために何らかの数学演算を行う方法があるのではないかと考えていましたが、これは単なる推測にすぎません。
助けてくれてありがとう。
編集: 私が正確に何を意味するかについて、人々は混乱するかもしれないと思います. タプルはこの状況では機能しません。これは、任意の数のフィールドを 1 つのハッシュ可能なオブジェクトに結合する必要があるためです。フィールドの数は、設計時ではなく、実行時にのみわかります。
辞書へのキーとして使用できるオブジェクトが必要なため、すべてのハッシュコードを数学的に新しいハッシュコードに結合するという他の解決策も機能しません。Dictionary のキーとしてハッシュコードを使用することは非常に危険だと思います。
編集2:これについてもう少し考えた後、私の元の解決策は良いものではないと思います。単一のフィールドがある限定的なケースでは、私のソリューションは、ハッシュコードの文字列バージョンを辞書に入れることに退化しました。
おそらくより良い解決策は、コンストラクターで列挙型を取り、GetHashCode() を実装する新しい型を作成することだと思います。GetHashCode() 関数は、列挙可能な各値をループし、ハッシュ コード関数で通常のタイプのアキュムレータ ロジックを実行します。このようにして、オブジェクトは辞書やハッシュセットなどにスタックされ、期待どおりに動作します。