Go マップでのカスタム キーの比較
Go では、マップには比較可能なキーが必要ですが、カスタムの等価演算が必要になる場合があります。このシナリオは、ユーザー定義の構造体などのカスタム データ構造がマップ キーとして使用される場合に発生します。
この制限を回避するには、マップとして機能する構造体から別の属性を派生する回避策が必要です。鍵。この派生属性は、望ましい等価セマンティクスを持ち、本質的にキーとして使用できる必要があります。
次の例を考えてみましょう:
type Key struct { a *int } func (k *Key) HashKey() int { return *k.a }
この例では、HashKey メソッドは次の整数値を派生します。キーの ID を表します。次に、この派生属性を使用してマップを構築できます。
k1, k2 := Key{intPtr(1)}, Key{intPtr(2)} m := map[int]string{} m[k1.HashKey()] = "one" m[k2.HashKey()] = "two" fmt.Println(m) // Outputs: map[1:one 2:two]
キーの比較は HashKey() メソッドのみに依存し、カスタムの等価セマンティクスが可能であることに注意してください。
不変性考慮事項
ただし、このアプローチを使用する場合は不変性が重要です。元の構造体のフィールドが変更されると、インスタンスの ID が変更されるため、インスタンスはマップ キーとして使用できなくなります。
以上がGo Maps でカスタムキー比較を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。