ホームページ >バックエンド開発 >Golang >Go Maps でカスタムキー比較を実装するにはどうすればよいですか?

Go Maps でカスタムキー比較を実装するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-16 06:11:16694ブラウズ

How Can I Implement Custom Key Comparison in Go Maps?

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

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