Go 言語マップの基本を理解するのに役立つ記事

リリース: 2023-07-25 17:05:16
転載
660 人が閲覧しました

まえがき

皆さん、私は周巴です。今回は引き続き囲碁マップの基礎を学習していきます。


過去の回想

上記複数の記事にて、データ型配列を学びました。 Slicing などはデータの保存に役立ちます。

特にスライスは、複数のものを保存でき、柔軟に追加、削除、変更、検索が可能です。

しかし、スライスにはまだいくつかの不都合があります。

#たとえば、学生は 名前 #、# などの複数の情報を持っています。 ##身長体重年齢# ##待って。 スライスを使用する場合は、次のように保存できます。

package main


import "fmt"


func main() {
    //学生1
    var stu1 = []string{"张三", "188", "70KG", "18"}
    //学生2
    var stu2 = []string{"李四", "170", "66KG", "17"}
    fmt.Println(stu1)
    fmt.Println(stu2)
}
ログイン後にコピー

現在の知識ではここまでしかできず、これくらいしか思いつきません。

しかし、明らかな欠点があります。つまり、値 または # を取得するには、 添字を使用する必要があります。 ## 値 ## を変更します。

そして、変更したい値の添え字がどこにあるのかを数えなければなりませんが、これはあまり便利ではありません。


#map の紹介

map は Python や Java では辞書と呼ばれますPHPではマップとも言いますが、PHPのリストにはマップの機能があるようです。

map は、

キーと値のペア (キーと値) ストレージ構造であり、 です。 Unorderhash を使用して内部実装され、高いパフォーマンスを実現します。 Go では、map の型は

reference で、メモリ マップは次のとおりです。

map基本使用

map语法

方式一,声明时赋值
var 变量名 = map[key类型][value类型]{
    key:value,
    key:value,//必须使用,结尾,否则会报错
}
//方式二,make方式
var 变量名 = make(map[key类型]value类型, 容量(cap))
//如果map是make方式声明的,第二个参数直接就是容量,元素个数是0,没有第三个参数
ログイン後にコピー

示例

方式一,声明时赋值

代码

package main


import "fmt"


func main() {
    var stu1 = map[string]string{
        "Name":   "张三",
        "Age":    "18",
        "height": "188", //每行都要以,结尾,
}
    var stu2 = map[string]string{
        "Name":   "李四",
        "Age":    "20",
        "height": "170", //每行都要以,结尾,
}
    fmt.Println(stu1, stu2) 
    //map[Age:18 Name:张三 height:188] map[Age:20 Name:李四 height:170]
}
ログイン後にコピー

方式二,make方式

代码

package main


import "fmt"


func main() {
    var stu1 = make(map[string]string,10)
    stu1["Name"] = "张三"
    stu1["Age"] = "18"
    stu1["height"] = "188"


    var stu2 = make(map[string]string,10)
    stu2["Name"] = "李四"
    stu2["Age"] = "20"
    stu2["height"] = "170"
    fmt.Println(stu1,stu2)
    //map[Age:18 Name:张三 height:188] map[Age:20 Name:李四 height:170]
}
ログイン後にコピー

ps:关于这两种方式,哪个使用的多。

我的建议是,如果确定有多少个字段,就使用第一种,如果不确定多少个字段,是动态添加的,用第二种。

使用第二种要大概估算好容量,超过会触发自动扩容机制,可能会产生那么一丝丝的性能影响。


遍历map(查)

遍历map,通常只用一种方式for range

代码

package main


import "fmt"


func main() {
    var stu1 = make(map[string]string, 10)
    stu1["Name"] = "张三"
    stu1["Age"] = "18"
    stu1["height"] = "188"


    for key, value := range stu1 {
        //map遍历时,key值键,value是值
        fmt.Println(key, value)
  }
}
ログイン後にコピー

只遍历key

package main


import "fmt"


func main() {
    var stu1 = make(map[string]string, 10)
    stu1["Name"] = "张三"
    stu1["Age"] = "18"
    stu1["height"] = "188"


    for key := range stu1 {
        //只遍历key
        fmt.Println(key)
  }
}
ログイン後にコピー

修改map的值(改)

package main


import "fmt"


func main() {
    //var stu1 = make(map[string]string, 10)
    //stu1["Name"] = "张三"
    //stu1["Age"] = "18"
    //stu1["height"] = "188"
    //
    //stu1["Name"] = "张三666"//修改
    //fmt.Println(stu1)


    //同上
    var stu1 = map[string]string{
        "Name":   "张三",
        "Age":    "18",
        "height": "188", //每行都要以,结尾,
}
    stu1["Name"] = "张三666"//修改
    fmt.Println(stu1)
}
ログイン後にコピー

删除map里面的值

删除map里面的值需要用到delete

代码

package main


import "fmt"


func main() {


    var stu1 = map[string]string{
        "Name":   "张三",
        "Age":    "18",
        "height": "188", //每行都要以,结尾,
}
    fmt.Println(stu1)    //map[Age:18 Name:张三 height:188]
    delete(stu1, "Name") //删除key以及key对应的值
    fmt.Println(stu1)    //map[Age:18 height:188]
}
ログイン後にコピー

map取值注意事项

map在取值时,尽可能的判断一下是否key存在

package main


import "fmt"


func main() {


  var stu1 = map[string]string{
    "Name":   "张三",
    "Age":    "18",
    "height": "188", //每行都要以,结尾,
  }
  //result := stu1["Name"]//key存在,没问题
  //fmt.Println(result)//张三
  //result := stu1["Names"]//手一抖,key打错了
  //fmt.Println(result)//结果为空,显然不是太友好


  //取值标准用法
  result, ok := stu1["Name"]
  //如果key存在,ok为true,如果key不存在,ok为false
  fmt.Println(result,ok)//张三 true
  if ok {
    fmt.Println(result)
  } else {
    fmt.Println("key不存在")
  }
}
ログイン後にコピー

总结

上述我们学习了Go基础之map。如果在操作过程中有任何问题,记得下面讨论区留言,我们看到会第一时间解决问题。

以上がGo 言語マップの基本を理解するのに役立つ記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:Go语言进阶学习
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート