Go マップのカスタム キー同等性
Go でマップを作成する場合、実装されている限り、任意の型をキーとして使用できます。同等のインターフェイス。デフォルトでは、Go はキーの比較に組み込みの等価演算子 (==) を使用します。ただし、独自の等価基準を定義したい場合もあります。
例
次のカスタム キー タイプを考えてみましょう:
type Key struct { a *int }
Key の 2 つのインスタンスを比較するには、独自の Equal を使用する必要があります。 function:
func Equal(x Key, y Key) bool { return *x.a == *y.a }
回避策
残念ながら、Go ではマップ キーにカスタム ハッシュ関数や等価関数を指定することはできません。代わりに、次の回避策を使用できます:
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"
注意事項
このアプローチは不変性に依存していることに注意してください。派生キー属性の。 Key 構造体のいずれかのフィールドが変更されると、キーの ID が変更され、期待どおりに動作しなくなります。
以上がGo マップにカスタム キーの等価性を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。