まず、複合キーの私の定義-2つ以上の値を組み合わせてキーを作成します。データベースの複合キーと混同しないでください。
私の目標は、pow(x、y)の計算値をハッシュテーブルに保存することです(xとyは整数です)。これは私がキーを作成する方法についてのアイデアが必要なところです。そのため、xとyが与えられると、ハッシュテーブルでそれを検索して、pow(x、y)を見つけることができます。
例えば。pow(2、3)=> {key(2,3):8}関数/ key(2,3)を取得する方法は、私が理解したいものです。
一般に、ハッシュテーブルのキーとして使用しながら、複数の値の組み合わせであるキーを処理する最良の方法は何ですか。
ありがとう
最も簡単で柔軟な方法はstruct
、キーの一部として使用するすべてのデータを含め、キータイプとしてaを使用することです。
type Key struct {
X, Y int
}
そして、それだけです。それを使う:
m := map[Key]int{}
m[Key{2, 2}] = 4
m[Key{2, 3}] = 8
fmt.Println("2^2 = ", m[Key{2, 2}])
fmt.Println("2^3 = ", m[Key{2, 3}])
出力(Go Playgroundで試してください):
2^2 = 4
2^3 = 8
仕様:マップタイプ:比較演算子==
と!=
が完全に定義されているキーとして任意のタイプを使用でき、上記のKey
構造体タイプがこれを満たします。
仕様:比較演算子:すべてのフィールドが比較可能な場合、構造体の値は比較可能です。2つの構造体の値は、対応する非空白のフィールドが等しい場合に等しくなります。
重要なことの1つ:ポインターを*Key
比較するとメモリアドレスのみが比較され、ポイントされた値は比較されないため、キーの種類(例:)としてポインターを使用しないでください。
また、キータイプとして(スライスではなく)配列を使用することもできますが、配列は構造体ほど柔軟ではありません。詳しくは、こちらをご覧ください:Goに配列がある理由
これは、配列の場合のようになります。
type Key [2]int
m := map[Key]int{}
m[Key{2, 2}] = 4
m[Key{2, 3}] = 8
fmt.Println("2^2 = ", m[Key{2, 2}])
fmt.Println("2^3 = ", m[Key{2, 3}])
出力は同じです。Go Playgroundでお試しください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加