Rumah >pembangunan bahagian belakang >Golang >Artikel untuk membantu anda memahami asas peta bahasa Go

Artikel untuk membantu anda memahami asas peta bahasa Go

Go语言进阶学习
Go语言进阶学习ke hadapan
2023-07-25 17:05:16714semak imbas

Kata Pengantar

Hai semua, saya Zhou Ba Kali ini kita akan terus mempelajari asas peta Go.


Mengingat masa lalu

Dalam beberapa artikel di atas, kami belajar tentang jenis data , Hiris dll. untuk membantu kami menyimpan data.

Terutama hirisan, yang boleh menyimpan berbilang perkara dan boleh ditambah, dipadam, diubah suai dan disemak secara fleksibel.

Tetapi menghiris masih ada sedikit kesulitan.

Sebagai contoh, seorang pelajar mempunyai pelbagai maklumat, seperti nama, tinggi, umur dsb.

Kalau guna hirisan, mungkin kita simpan macam ni.

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)
}

Mengikut pengetahuan semasa, saya hanya boleh pergi sejauh ini, dan saya hanya boleh memikirkan ini.

Tetapi akan ada kelemahan yang jelas, iaitu kita perlu menggunakan subskrip untuk mendapatkan nilai atau ubah suai nilai.

Dan kita perlu mengira di mana subskrip nilai yang ingin kita ubah suai, yang agak tidak begitu mudah.


Memperkenalkan peta

, yang dipanggil kamus dalam Python dan peta dalam Java nampaknya mempunyai fungsi peta.

peta ialah pasangan nilai-kunci (nilai-kunci) struktur storan, iaitu tidak tertib , digunakan secara dalaman sh

pelaksanaan, prestasi Sangat tinggi.

Dalam Go, peta ialah jenis rujukan

, dan peta ingatan adalah seperti berikut.

Artikel untuk membantu anda memahami asas peta bahasa Go

🎜🎜

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。如果在操作过程中有任何问题,记得下面讨论区留言,我们看到会第一时间解决问题。

Atas ialah kandungan terperinci Artikel untuk membantu anda memahami asas peta bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:Go语言进阶学习. Jika ada pelanggaran, sila hubungi admin@php.cn Padam