zoukankan      html  css  js  c++  java
  • Golang Map

    1. map 的定义和初始化

    • Map 是 go 内置的数据结构,是一种无序的键值对的集合,可以通过 key 快速找到 value 的值
    • Map 必须初始化才能使用,否则报错

    定义 Map

    var 变量名 map[key的数据类型] value的数据类型
    

    创建 map

    package main
    
    import "fmt"
    
    func main() {
    	// 1. 创建空map
    	var m1 map[string]int
    	fmt.Println(m1 == nil)
    	fmt.Println(m1)
    
    	// 2. :=
    	m2 := map[string]int{}
    	fmt.Println(m2)
    	m3 := make(map[string]int)
    	fmt.Println(m3)
    
    	// 3. 指定长度make
    	m4 := make(map[string]int, 10)
    	fmt.Println(m4)
    }
    

    初始化 map

    package main
    
    import "fmt"
    
    func main() {
    	// 1. 定义并初始化
    	var m1 map[int]string = map[int]string{1: "hello", 2:"world"}
    	fmt.Println(m1)
    
    	// 2. 自动推导
    	m2 := map[int]string{1: "world", 2: "hello"}
    	fmt.Println(m2)
    }
    

    2. 键值操作

    package main
    
    import "fmt"
    
    func main() {
    	m1 := map[int]string{1: "a", 2: "b"}
    	// 修改
    	fmt.Println(m1)
    	m1[1] = "abc"
    	fmt.Println(m1)
    
    	// 增加
    	m1[3] = "aaa"
    	m1[5] = "bbb"
    	fmt.Println(m1)
    
    	// 删除
    	delete(m1, 1)
    	fmt.Println(m1)
    }
    

    3. 遍历

    package main
    
    import "fmt"
    
    func main() {
    	m := map[int]string{1: "a", 2: "b", 3: "c", 5: "d"}
    
    	for k, v := range m {
    		fmt.Printf("key: %d, value: %s
    ", k, v)
    	}
    }
    

    4. 其他操作

    查找某个键是否存在

    package main
    
    import "fmt"
    
    func main() {
    	m := map[int]string{1: "a", 2: "b", 3: "c", 5: "d"}
    
    	v, ok := m[1]
    	if ok {
    		fmt.Println("指定key存在", v)
    	} else {
    		fmt.Println("指定key不存在", v)
    	}
    }
    

    对无序的 map 进行排序

    package main
    
    import (
    	"fmt"
    	"sort"
    )
    
    func main() {
    	m := map[int]string{1: "a", 3: "c", 2: "b", 5: "d"}
    
    	// 将map中所有的key存储到一个切片中
    	var allKey []int
    	for k, _ := range m {
    		allKey = append(allKey, k)
    	}
    
    	// 对切片进行排序
    	sort.Ints(allKey)
    
    	// 通过排序好的切片从map中取有序的数值
    	for _, k :=range allKey {
    		fmt.Printf("key: %d, value: %s
    ", k, m[k])
    	}
    }
    

    map 是引用类型

    package main
    
    import "fmt"
    
    // 函数内修改
    func modify(m map[int]string) {
    	m[105] = "abc"
    }
    
    func main() {
    	m := make(map[int]string)
    	m[101] = "a"
    	m[102] = "b"
    	m[105] = "c"
    	fmt.Println("m", m)
    
    	// 赋值给其他
    	b := m
    	b[101] = "123"
    	fmt.Println("b", b)
    	fmt.Println("m", m)
    
    	modify(m)
    	fmt.Println("m", m)
    }
    

    map 类型的切片初始化

    package main
    
    import "fmt"
    
    func main() {
    	// map类型的切片
    	sm := []map[int]string{}
    	// 初始化一个slice的map值
    	ss := make(map[int]string)
    	// 将map类型append到切片中
    	sm = append(sm, ss)
    
    	fmt.Println(sm)
    }
    

    值为切片类型的 map

    package main
    
    import "fmt"
    
    func main() {
    	// 定义一个map值为切片类型的map
    	ms := make(map[int][]int)
    	// 初始化map值为切片类型的值
    	ms[0] = make([]int,5)
    
    	fmt.Println(ms)
    }
    
  • 相关阅读:
    c# 日期函数
    js中的replace问题和textarea回车符问题
    项目代码风格要求
    重温Observer模式--热水器·改
    xcode 编译glfw , 导出.h
    开发者所需要知道的 iOS 11 SDK 新特性
    RAC基础笔记(2)
    RAC基础笔记
    NSString copy,strong 修饰问题
    git 常用操作
  • 原文地址:https://www.cnblogs.com/zhichaoma/p/12509996.html
Copyright © 2011-2022 走看看