ホームページ >バックエンド開発 >Golang >ユーザー定義の構造体を Go マップのキーとして使用するにはどうすればよいですか?

ユーザー定義の構造体を Go マップのキーとして使用するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-10 16:30:18566ブラウズ

How Can I Use User-Defined Structs as Keys in Go Maps?

ユーザー定義キーとカスタム等価性を使用した 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。