zoukankan      html  css  js  c++  java
  • Go的map

    map

    相当于python中的字典。

    一、map的创建

    map 在定义时,key(数字和字符串)和value的类型固定了,且key只能用数字和字符串。

    1、map的类型

    map[key的类型]value的类型
    

    2、定义并初始化

    var dic map[int]string  //这样声明只是nil类型
    
    map想要使用需要初始化 
    // 方法一:make(map类型)
    var dic map[int]string = make(map[int]string)
    dic[1] = "donner"
    
    // 方法二:赋值为 map类型+{}
    var dic = map[int]string{}
    dic[1] = "donner"
     
    dic := map[int]string{}
    dic[1] = "donner"
    fmt.Println(dic)
    

    二、给map添加元素

    map[索引] = 值添加元素。

    var dic = map[int]string{}
    dic[1] = "donner"
    

    三、获取map的元素

    获取 map 元素的语法是 map[key]

    var dic = map[int]string{1:"a",2:"b",3:"c"}
    ele := dic[1]
    fmt.Println(ele)  // a
    el2 := dic[8]
    fmt.Println(el2)  // ""  没有设值的,会取value类型的默认值
    

    从字典中取值,其实会返回两个值,一个是真正的值,一个是true或false。
    如果用一个变量来接,就是值;两个变量接,一个是值,一个是true或false。

    var dic = map[int]string{1:"a",2:"b",3:"c"}
    
    el3,is_ex := dic[2]
    fmt.Println(el3,is_ex)  // b true
    
    el4,is_ex := dic[4]
    fmt.Println(el4,is_ex)  // "" false
    

    四、删除map的元素

    根据key删除值,语法是 delete(map, key)。这个函数没有返回值。

    var dic = map[int]string{1:"a",2:"b",3:"c"}
    fmt.Println(dic)  // map[1:a 2:b 3:c]
    delete(dic,1)
    fmt.Println(dic)  // map[2:b 3:c]
    

    五、获取map的长度

    var dic = map[int]string{1:"a",2:"b",3:"c"}
    fmt.Println(dic)  // map[1:a 2:b 3:c]
    fmt.Println(len(dic))  // 3
    dic[4] = "d"
    fmt.Println(dic)  // map[1:a 2:b 3:c 4:d]
    fmt.Println(len(dic))  // 4
    

    六、map的类型

    map是引用类型,修改传参的map也会修改原map。

    var dic = map[int]string{1:"a",2:"b",3:"c"}
    fmt.Println(dic)  // map[1:a 2:b 3:c]
    change_dic(dic)  // map[1:change 2:b 3:c]
    fmt.Println(dic)  // map[1:change 2:b 3:c]
    
    func change_dic(d map[int]string)  {
    	d[1] = "change"
    	fmt.Println(d)
    }
    

    七、map的相等性

    map 之间不能使用 == 操作符判断,== 只能用来检查 map 是否为 nil

    map1 := map[string]int{
        "one": 1,
        "two": 2,
    }
    
    map2 := map1
    
    if map1 == map2 {  // 直接划红线报错
    }
    
    // invalid operation: map1 == map2 (map can only be compared to nil)
    

    八、循环map

    只能用range循环遍历map,不能用i初始化的方式。

    var dic = map[int]string{1:"a",2:"b",3:"c",4:"d"}
    
    for k,v:=range dic{
        fmt.Println(k,v)
    }
    
    1 a
    2 b
    3 c
    4 d
    
  • 相关阅读:
    DELPHI给整个项目加编译开关
    TThread.Queue和TThread.Synchronize的区别
    中文分词 《第七篇》
    搜索结果的处理和显示《第六篇》
    高级搜索 《第五篇》
    索引管理 《第四篇》
    执行搜索 《第三篇》
    构建索引 《第二篇》
    Lucene.net 基本示例 《第一篇》
    通过配置的方式Autofac 《第三篇》
  • 原文地址:https://www.cnblogs.com/bowendown/p/12595107.html
Copyright © 2011-2022 走看看