ホームページ > バックエンド開発 > Golang > Go でマップ キーのカスタム等価性を実装するにはどうすればよいですか?

Go でマップ キーのカスタム等価性を実装するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-08 14:32:17
オリジナル
341 人が閲覧しました

How Can I Implement Custom Equality for Map Keys in Go?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート