• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

【原创】go语言学习(十)Map类型

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

目录

  • 声明和初始化
  • 基本操作
  • map排序
  • map类型的切⽚片
  • 课后作业

声明和初始化

1、map类型是⼀一个key-value的数据结构。

//var a map[key的类型]value类型
var a map[string]int
var b map[int]string
var c map[float32]string

  注意:map必须初始化才能使⽤用,否则panic

2、map类型的变量量默认初始化为nil,需要使⽤用make分配map内存

package main
import (
    "fmt"
)
func main() {
    var a map[string]int
    if a == nil {
        fmt.Println("map is nil. Going to make one.")
        A = make(map[string]int)
    }
}

  

 

基本操作

1、map插入操作

package main
import (
    "fmt"
)
func main() {
    a := make(map[string]int)
    a["steve"] = 12000
    a["jamie"] = 15000
    a["mike"] = 9000
    fmt.Println(“a map contents:", a)
}

  

2、声明时进⾏行行初始化

package main
import (
    "fmt"
)
func main() {
    var a map[string]int
    if a == nil {
        fmt.Println("map is nil. Going to make one.")
        A = make(map[string]int)
    }
}        

  

3、map插入操作

package main
import (
    "fmt"
)
func main() {
    a := make(map[string]int)
    a["steve"] = 12000
    a["jamie"] = 15000
    a["mike"] = 9000
    fmt.Println(“a map contents:", a)
}

  

4、声明时进⾏行行初始化

package main
import (
    "fmt"
)
func main() {
    a := map[string]int {
        "steve": 12000,
        "jamie": 15000,
    }
    a[“mike"] = 9000
    fmt.Println(“a map contents:", a)
}

  

5、 通过key访问map中的元素

package main
import (
    "fmt"
)
func main() {
    a := map[string]int{
        "steve": 12000,
        "jamie": 15000,
    }
    a["mike"] = 9000
    b := "jamie"
    fmt.Println("Salary of", b, "is", a[b])
}

  

6、 通过key访问map中的元素

package main
import (
    "fmt"
)
func main() {
    a := map[string]int{
        "steve": 12000,
        "jamie": 15000,
    }
    a["mike"] = 9000
    b := “123”
    fmt.Println("Salary of", b, "is", a[b])
}

  

7、如何判断map指定的key是否存在? value, ok := map[key]

package main
import (
    "fmt"
)
func main() {
    a := map[string]int{
        "steve": 12000,
        "jamie": 15000,
    }
    a["mike"] = 9000
    b := "joe"
    value, ok := a[b]
    if ok == true {
        fmt.Println("Salary of", b, "is", value)
    } else {
        fmt.Println(b,”not found")
    }
}        

  

8、map遍历操作

package main
import (
    "fmt"
)
func main() {
    a := map[string]int{
        "steve": 12000,
        "jamie": 15000,
    }
    a["mike"] = 9000
    fmt.Println("All items of a map")
    for key, value := range a {
        fmt.Printf("personSalary[%s] = %d\n", key, value)
    }
}        

  

9、map删除元素

package main
import (
    "fmt"
)
func main() {
    a := map[string]int{
        "steve": 12000,
        "jamie": 15000,
    }
    a["mike"] = 9000
    fmt.Println("map before deletion", a)
    delete(a, "steve")
    fmt.Println("map after deletion", a)
}

  

10、map的长度

package main
import (
    "fmt"
)
func main() {
    a := map[string]int{
        "steve": 12000,
        "jamie": 15000,
    }
    a["mike"] = 9000
    fmt.Println("length is", len(a))
}

  

11、map是引用类型

package main
import (
    "fmt"
)
func main() {
    a := map[string]int{
        "steve": 12000,
        "jamie": 15000,
    }
    a["mike"] = 9000
    fmt.Println(“origin map", a)
    b := a
    b["mike"] = 18000
    fmt.Println(“a map changed", a)
}

  

12、map按照key进行行排序,遍历

package main
import (
    "fmt"
    "sort"
)
func main() {
    var a map[string]int = make(map[string]int, 10)
    for i := 0; i < 10; i++ {
        key := fmt.Sprintf("key%d", i)
        a[key] = i
    }
    var keys []string
    for key, _ := range a {
        keys = append(keys, key)
    }
    sort.Strings(keys)
    for _, key := range keys {
        fmt.Printf("key:%s=%d\n", key, a[key])
    }
}    

 

map排序

package main

import (
	"fmt"
	"math/rand"
	"sort"
	"time"
)

func main() {
	rand.Seed(time.Now().UnixNano())
	var a map[string]int = make(map[string]int, 1024)

	for i := 0; i < 128; i++ {
		key := fmt.Sprintf("stu%d", i)
		value := rand.Intn(1000)
		a[key] = value
	}

	var keys []string = make([]string, 0, 128)
	for key, value := range a {
		fmt.Printf("map[%s]=%d\n", key, value)
		keys = append(keys, key)
	}

	sort.Strings(keys)
	for _, value := range keys {
		fmt.Printf("key:%s val:%d\n", value, a[value])
	}
}

  

map类型的切片

package main

import (
	"fmt"
	"math/rand"
	"time"
)

func sliceMap(){
	rand.Seed(time.Now().UnixNano())
	var s[]map[string] int
	s = make([]map[string]int, 5, 16)
	for index,val := range s {
		fmt.Printf("slice[%d]=%v\n", index, val)
	}

	fmt.Println()
	s[0] = make(map[string]int, 16)
	s[0]["stu01"] = 1000
	s[0]["stu02"] = 1000
	s[0]["stu03"] = 1000

	for index, val := range s {
		fmt.Printf("slice[%d]=%v\n", index, val)
	}
}

func mapSlice() {
	rand.Seed(time.Now().UnixNano())
	var s map[string][]int
	s = make(map[string[]int, 16)
	key := "stu01"
	value, ok := s[key]
	if !ok {
		s[key] = make([]int, 0, 16)

		value  = s[key]
	}


	value = append(value, 100)
	value = append(value, 200)
	value = append(value, 300)

	s[key] = value
	fmt.Printf("map:%v\n", s)
}

func main(){
	//sliceMap()
}

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
vscode-Live Server最低端go-live不见发布时间:2022-07-10
下一篇:
go语言之并发发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap