Go でのユーザー定義の等価性を備えたカスタム マップ キー
Go では、マップはマップ キーに対して厳密に同等のセマンティクスを採用します。これは、プログラマが他の言語のように独自のハッシュ関数やマップ キーの等価演算を実装できないことを意味します。
この制限に対処するには、別のアプローチを検討してください。構造体インスタンスをキーとして直接利用する代わりに、適切なマップ キーとして機能し、必要な等価セマンティクスに準拠する構造体の派生属性を使用します。多くの場合、インスタンスの ID を表すハッシュ コードとして整数または文字列値を導出することが可能です。
導出されたハッシュ コード内の衝突が、インスタンスの真のセマンティック ID を示す場合にのみ発生するようにすることが重要です。保存された値。これは、対応する値が交換可能である必要があることを意味します。
例:
type Key struct { a *int } func (k *Key) HashKey() int { return *(*k).a } k1, k2 := Key{intPtr(1)}, Key{intPtr(2)} m := map[int]string{} m[k1.HashKey()] = "one" m[k2.HashKey()] = "two" // m = map[int]string{1:"one", 2:"two"} m[k1.HashKey()] // => "one"
ただし、このアプローチを使用する場合は、不変性の問題に注意してください。上記の例のフィールドを変更すると、インスタンスの ID が変更されるため、インスタンスはハッシュ キーとして機能できなくなります。
以上がGo でマップ キーのカスタム等価性を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。