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