ホームページ  >  記事  >  バックエンド開発  >  Golangのマップとは何ですか

Golangのマップとは何ですか

青灯夜游
青灯夜游オリジナル
2023-01-13 11:07:133937ブラウズ

golang では、マップは特別なデータ構造です。キー (インデックス) と値 (値) の形式の順序付けされていないコレクションです。連想配列または辞書とも呼ばれます。マップは値を素早く見つけられる理想的な構造は、与えられたキーに基づいて対応する値を素早く見つけることができるデータ構造です。

Golangのマップとは何ですか

このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。

Go 言語のマップは、要素のペア (ペア) の順序付けされていないコレクションである特別なデータ構造であり、ペアはキー (インデックス) と値 (値) に対応するため、この構造は連想配列または連想配列とも呼ばれます。辞書は、値をすばやく見つけることができる理想的な構造であり、キーが与えられると、対応する値をすぐに見つけることができます。

Golang のマップのキーには、int、string、bool など、== を使用して比較できる任意のデータ型を指定でき、値には任意の型を指定できます。

マップは順序付けされていないデータ構造であるため、走査するたびに同じマップが一貫性のない順序で取得される可能性があります。

マップの概念

map は参照型であり、次の方法で宣言できます:

var mapname map[keytype]valuetype

where:

  • mapname はマップの変数名です。

  • keytype はキーのタイプです。

  • valuetype は、キーに対応する値のタイプです。

ヒント: [keytype] と valuetype の間にはスペースを使用できます。

マップは動的に拡張できるため、宣言時にマップの長さを知る必要はありません。初期化されていないマップの値は nil です。関数 len() を使用して取得できます。マップ内のペアの数。

[例]

package main
import "fmt"
func main() {
    var mapLit map[string]int
    //var mapCreated map[string]float32
    var mapAssigned map[string]int
    mapLit = map[string]int{"one": 1, "two": 2}
    mapCreated := make(map[string]float32)
    mapAssigned = mapLit
    mapCreated["key1"] = 4.5
    mapCreated["key2"] = 3.14159
    mapAssigned["two"] = 3
    fmt.Printf("Map literal at \"one\" is: %d\n", mapLit["one"])
    fmt.Printf("Map created at \"key2\" is: %f\n", mapCreated["key2"])
    fmt.Printf("Map assigned at \"two\" is: %d\n", mapLit["two"])
    fmt.Printf("Map literal at \"ten\" is: %d\n", mapLit["ten"])
}

出力結果:

Golangのマップとは何ですか

この例では、mapLit は {key1: value1, key2: の使用を示しています。 value2} 形式を使用して、配列や構造体と同様にマップを初期化します。

上記のコードの mapCreated の作成メソッド mapCreated := make(map[string]float) は、mapCreated := map[string]float{}## と同等です。 # 。

mapAssigned は、mapList への参照であり、mapAssigned への変更は、mapLit の値にも影響します。

注: make() は使用できますが、マップの構築に new() を使用することはできません。参照オブジェクトを割り当てるために new() を誤って使用すると、null 参照ポインタが取得されます。これは、初期化されていない変数を宣言してそのアドレスを取得するのと同じです:

mapCreated := new(map[string]float)

次に、mapCreated["key1"] = 4.5 を呼び出すと、コンパイラはエラーを報告します:

invalid operation: mapCreated["key1"] (index of type *map[string]float).

マップの容量

配列とは異なり、マップは新しいキーと値に応じて動的に拡張および縮小できるため、固定長や最大制限はありませんが、マップをマークすることを選択します。 初期容量の形式は次のとおりです:

make(map[keytype]valuetype, cap)

例:

map2 := make(map[string]float, 100)

マップが容量の上限に達したとき、新しいキーと値が追加された場合を指定すると、マップのサイズが自動的に 1 ずつ増加します。そのため、パフォーマンス上の理由から、大きなマップや急速に拡大するマップの場合は、容量が大まかにしかわかっていない場合でも、最初にそれを指定することをお勧めします。

これは、マップの具体的な例です。つまり、音階を対応するオーディオにマッピングするものです:

noteFrequency := map[string]float32 {
"C0": 16.35, "D0": 18.35, "E0": 20.60, "F0": 21.83,
"G0": 24.50, "A0": 27.50, "B0": 30.87, "A4": 440}

[関連する推奨事項:

Go ビデオ チュートリアル プログラミング教育]

以上がGolangのマップとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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