• golang-map的基本操作


    map的基本操作

    map的定义方式

    由于map是引用类型,所以在操作的时候,必须先初始化

    方式一:

    	var a map[string]int
    	a = make(map[string]int, 16)
    	fmt.Printf("a = %#v 
    ", a)
    	a["stu01"] = 1000
    

    方式二:

    	a := map[string]int{
    		"stu01": 100,
    		"stu03": 300,
    		"stu02": 200,
    	}
    	fmt.Printf("a = %#v 
    ", a)
    

    判断key是否存在

    在获取map的值得时候,可以接收两个值,一个是获取的值,一个是判断是否存在的bool类型,如果存在,返回对应值,bool为true,不存在,返回对应类型的空值,bool为false

    func test3() {
    	var a map[string]int
    	a = make(map[string]int, 16)
    	fmt.Printf("a = %#v 
    ", a)
    	a["stu01"] = 1000
    	a["stu02"] = 2000
    	var result int
    	var ok bool
    	var key string = "stu04"
    	result, ok = a[key]
    	if ok == false {
    		fmt.Printf("key is %s is not exist
    ", key)
    	} else {
    		fmt.Printf("key is %s = %d 
    ", key, result)
    	}
    }
    

    map的遍历key,value

    使用for ... range 的方法进行遍历,获取当中的值

    func test4() {
    	rand.Seed(time.Now().UnixNano())
    
    	var a map[string]int
    	a = make(map[string]int, 1024)
    	for i := 0; i < 128; i++ {
    		key := fmt.Sprintf("stu%d", i)
    		value := rand.Intn(1000)
    		a[key] = value
    	}
    	for key, value := range a {
    		fmt.Printf("map[%s]=%d
    ", key, value)
    	}
    }
    

    map删除元素

    使用内置的delete方法进行删除

    func test5() {
    	var a map[string]int
    	a = make(map[string]int, 16)
    	fmt.Printf("a = %#v 
    ", a)
    	a["stu01"] = 1000
    	a["stu02"] = 2000
    	a["stu03"] = 3000
    	fmt.Printf("a = %#v 
    ", a)
    	delete(a, "stu02")
    	fmt.Printf("DEL after a = %#v 
    ", a)
    }
    

    删除所有的,需要用for循环,挨个删除

    map的长度

    使用len内置函数求出

    map的复制

    map是引用类型,在系统中,复制的时候,指向的内存地址是一样的,所以修改一个,其他的也会跟着变更

    func test6() {
    	var a map[string]int
    	if a == nil {
    		a = make(map[string]int, 16)
    		a["stu01"] = 1000
    		a["stu02"] = 2000
    		a["stu03"] = 3000
    		fmt.Printf("a = %#v 
    ", a)
    		b := a
    		b["stu01"] = 8888
    		fmt.Printf("after modify a : %#v
    ", a)
    	}
    }
    

    map的切片

    由于map的value可以是数组,或者int,所以在value是数组的时候,使用的时候,也需要先初始化

    func main() {
    	rand.Seed(time.Now().UnixNano())
    	var s []map[string]int
    	s = make([]map[string]int, 5, 16)
    	for index, value := range s {
    		fmt.Printf("slice[%d] = %v 
    ", index, value)
    	}
    	fmt.Println()
    	s[0] = make(map[string]int, 16)
    	s[0]["stu01"] = 1000
    	s[0]["stu02"] = 2000
    	s[0]["stu03"] = 3000
    	for index, value := range s {
    		fmt.Printf("slice[%d] = %v 
    ", index, value)
    	}
    }
    
  • 相关阅读:
    dota监測
    C++ new malloc realloc
    LeetCode240:Search a 2D Matrix II
    Mentor.Graphics.FloTHERM.XT.2.3+Mentor.Graphics.Flowmaster.7.9.4
    怎样在Linux下使用Markdown进行文档工作
    用 Arduino Uno 给 Arduino Mini(Pro)烧录程序
    jQuery事件对象
    asp.net 获取系统的根目录
    C语言中将数字转换为字符串的方法
    ubuntu 12.04 64位设置兼容32位的实现
  • 原文地址:https://www.cnblogs.com/fan-yi/p/13793658.html
Copyright © 2020-2023  润新知