ホームページ >バックエンド開発 >Golang >Go マップでカスタム タイプをキーとして使用するにはどうすればよいですか?

Go マップでカスタム タイプをキーとして使用するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-12 13:57:10129ブラウズ

How Can I Use Custom Types as Keys in Go Maps?

Go マップのカスタム キーと等価性

Go では、マップはキーの比較に厳密な等価性を使用します。これは、カスタム タイプをマップ キーとして使用するには、標準の等価演算子 (==) を実装する必要があることを意味します。ただし、この制限には回避策があります。

派生キーの使用

構造体インスタンスをキーとして直接使用する代わりに、構造体の 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"

注意: 派生キーが本当にセマンティック ID を表す場合にのみ衝突するようにすることが重要です。派生キーのフィールドを変更すると、その ID が変更されるため、キーとしての使用が無効になります。

以上がGo マップでカスタム タイプをキーとして使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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