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

    1. 简介

      map 类似于Java中的 map,是一种存储键值对的数据结构。

      map 属于引用类型;

      声明方式:var  map1 map [keyType] valueType,

      示例:

        // 声明及初始化
        var map1 = make(map[int]int)
        map1[1] = 12
    // 声明 map var map2 map[string] int // 初始化 map map2 = make(map[string]int) map2["1"] = 123 fmt.Println(map1)

      未初始化的map值为 nil,声明时不需要指定map的容量,map是可以动态增长,当 map 增长到容量上限时,map 的大小自动增加,最好在初始化时设置其容量的大小;

    keyType:

      1. 任意可以用 == 或者 != 操作符比较的类型;

      2. 只包含内建类型的 struct ;

      3. 指针和接口类型;

      4. 提供 Ke() 和 Hash() 方法的结构体,这样可以通过结构体的域计算出唯一的数字或者字符串的 key;

      5. 数组、切片和含有数组和切片的结构体不能作为 key;

    valueType:

      1. 任意类型,可以通过空接口类型存储任意值;

      2. 函数类型,通过key选择要执行的函数

    2. 基本操作

    2.1 添加元素

      map1[key] = value

        var a3 =  make(map[int]int,5)
        a3[1]=1

    2.2 获取元素

      value = map1[key]

        var a3 =  make(map[int]int,5)
        a3[1]=1
        valuea31 := a3[1]

    2.3 判断 key 是否存在

      value1,isExist = map1[key1],value1 key1对应的值,isExist,bool值,表示是否存在这个 key1

        // 验证  val1, isPresent = map1[key1] 形式判断 val1 到底是空值,还是不存在这个 key1
        var a5 =  make(map[int]int)
        a5[1] = 0
        value3,isExist3 := a5[1]
        fmt.Printf("a5[1] value=%v,isExist=%t 
    ",value3,isExist3)
        value4,isExist4 := a5[2]
        fmt.Printf("a5[2] value=%v,isExist=%t 
    ",value4,isExist4)
    
        // 简写形式,判断 key 是否存在,并操作 value
        if value6,isExist6 := a5[1];isExist6{
            fmt.Printf("value6 exist:%v, value:%v",isExist6,value6)
        }
        // 只判断 key 是否存在
        if _,isExist6 := a5[1];isExist6{
            fmt.Printf("value6 exist:%v",isExist6)
        }

    2.4 删除元素

      delete(map1,key1)

        var a5 =  make(map[int]int)
        a5[1] = 0
        // 删除元素,不存在也不报错
        delete(a5,1)
        delete(a5,123)

    2.5 for-range

        var map1 = make(map[int]int)
        map1[1] = 12
        map1[2] = 13
        map1[12] = 2
        for key, value := range map1 {
            fmt.Printf("map1 key=%v,value=%v 
    ",key,value)
        }

    2.6 排序

      先将 key 存放到 slice ,再对 slice 进行排序, 然后按照 排序的 slice 输出 map

        // map1 初始化
        var map1 = make(map[int]int)
        map1[1] = 12
        map1[2] = 13
        map1[12] = 2
        // 存储 map1 的 key
        var slice = make([]int,3)
        i:= 0
        for key := range map1 {
            slice[i]=key
            i++
        }
        // 对 key  进行排序
        sort.Ints(slice)
        // 输出排序后的 map1
        for _, value := range slice {
            fmt.Println(value,"=",map1[value])
        }
  • 相关阅读:
    javascript 下拉列表 自动取值 无需value
    gopkg:一种方便的go pakcage管理方式
    编译GDAL使用最新的HDF库配置文件
    leetcode:程序员面试技巧
    【Unity Shader实战】卡通风格的Shader(一)
    GDAL1.11版本对SHP文件索引加速测试
    【Unity Shaders】Shader学习资源和Surface Shader概述
    关于rowid的函数
    java基本类型的大小
    【转载】oracle之rowid详解
  • 原文地址:https://www.cnblogs.com/virgosnail/p/12955814.html
Copyright © 2011-2022 走看看