zoukankan      html  css  js  c++  java
  • go之map

    一、概念

    • 简述
    1、map 是一种无序的键值对的集合。(类似于python的字典dict)
    2、map 的key 与 value 都是有类型的,且定义阶段时就已经统一
    
    • 定义方式
    # 方式一
    var mapName map[key_type]value_type
    mapName = make(map[key_type]value_type)
    // 如
    //    var user map[string]string
    //    user = make(map[string]string)
    
    
    # 方式二 简短声明
    mapName := make(map[key_type]value_type)
    // 如
    //    student := make(map[string]int)
    
    # 方式三
    mapName := map[key_type]value_type{}
    // 如
    // user := map[string]string{"jmz":"上海"}
    

    二、声明、初始化、make

    • map 也是引用类型,需要make 创建内存
    package main
    
    import "fmt"
    
    func main(){
    	var user map[string]string
    
    	user = make(map[string]string)
    	user["jmz"] = "安工大"
    	user["jly"] = "上核大"
    
    	fmt.Println(user)
    
    
    	data := make(map[string]int)
    	data["info1"] = 32
    	data["info2"] = 23
    
    	fmt.Println(data)
    
    	student := map[string]int{"jmz":23}
    	fmt.Println(student)
    }
    
    

    三、map的增删改查

    package main
    
    import "fmt"
    
    func main(){
    	// 简短声明
    	student := map[string]string{}
    
    
    	// 增
    	student["jmz"] = "上海"
    	student["qqc"] = "北京"
    	student["gka"] = "湖北"
    
    	// 改
    	student["jmz"] ="河南"
    
    	// 查
    	// 判断键是否存在
    	v,ok := student["jms"] // ok == true 则jms 键存在对应的value
    	if ok {
    		fmt.Println(v)
    	}
    
    	// for-range
    	for k,v := range student{
    		fmt.Printf("key:%s,value:%s 
    ",k,v)
    	}
    	//你会发现map的输出 是无序的,因为本来map就无序,想要有序请使用 切片
    
    
    	// 删
    	delete(student,"jmz")  // 不存在的键删除 也不会报错
    	// delete(student,"lll")  // 不会报错
    	fmt.Println(student)
    
    }
    
    

    四、map 之函数

    • map 用法一
    package main
    
    import "fmt"
    
    func main(){
    	// 简短声明
    	s := "中国是一个美丽的国家,China is a beautiful country"
    
    	info := runeCount(s)
    	for k,v := range info{
    		fmt.Printf("%s : %d 
    ",string(k),v)
    	}
    }
    
    // 字符串,解析每个字符的个数
    func runeCount(s string)map[rune]int{
    	info := map[rune]int{}
    
    
    	for _,v := range []rune(s){
    		info[v]++
    	}
    	return info
    }
    
    • map 用法二 键值对调
    
    package main
    import (
    	"fmt"
    )
    
    var (
    	barVal = map[string]int{"alpha": 34, "bravo": 56, "charlie": 23,
    		"delta": 87, "echo": 56, "foxtrot": 12,
    		"golf": 34, "hotel": 16, "indio": 87,
    		"juliet": 65, "kili": 43, "lima": 98}
    )
    
    func main() {
    	invMap := make(map[int]string, len(barVal))
    	for k, v := range barVal {
    		invMap[v] = k
    	}
    	fmt.Println("inverted:")
    	for k, v := range invMap {
    		fmt.Printf("Key: %v, Value: %v / ", k, v)
    	}
    }
    

    如果喜欢看小说,请到183小说网

  • 相关阅读:
    redisLock redis分布式锁
    Mabitis中的#与$符号区别及用法介绍
    pring Scheduler定时器原理分析
    SpringBoot几种定时任务
    线程池的理解
    JVM的方法区和永久带是什么关系
    JVM老年代和新生代的比例
    IO 与 NIO
    对mysql乐观锁、悲观锁、共享锁、排它锁、行锁、表锁概念的理解
    TCP滑动窗口控制流量的原理
  • 原文地址:https://www.cnblogs.com/xiaobaiskill/p/10633676.html
Copyright © 2011-2022 走看看