go 之 map 类型

7个月前 0 10 162

Map

map是go语言内置的数据结构, 保存键值对的无序组合。

特征

  1. 它的容量只受到机器内存的限制
  2. 里面的所有键都是唯一的而且必须支持==!=等操作符的类型
  3. 大部分go的数据类型都可用作Map的键,例如int, string, float, rune, 指针类型, 结构体都是可以的

Map和切片是一样的, 都属于引用类型, 所以不管Map的多大, 它的传递始终是廉价的,Map的查询非常快, 但是比切片和数组直接索引查询要慢大概两个数量级。

创建Map

make(map[keyType]valueType, capacity)
make(map[keyType]valueType)
map[keyType]valueType{}
map[keyType]valueType{key:value, .....}

第一种:可以预申请一定空间, 但是超过空间, Map会自动扩容
第二种和第三种效果一样
第四种:可以初始化一些值

age := make(map[string]int, 5)
age["jack"] = 12
age["lily"] = 32
fmt.Println(age)
fmt.Println(len(age))

map[jack:12 lily:32]
2

映射查询

if value, found := age["jack"]; found {
      fmt.Println("jack's age is", value)
} else {
        fmt.Println("key not found")
}

第一个参数是Map对应键的返回值, 第二个参数是返回布尔值, 如果found为true的话说明map有对应的键。

更新映射

age["jack"] = 45 // 更新
fmt.Println(age)
age["tom"] = 78 //添加
fmt.Println(age)
delete(age, "lily") //删除
fmt.Println(age)

遍历

for key, value := range age {
    fmt.Println(key, "=>", value)
}

版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)

评论 (10)
  • Cinque Terre

    waitFor

    #1 7个月前

    学习了!

  • Cinque Terre

    waitFor

    #2 7个月前

    @waitFor 可以回复吗

  • 评论已删除~
  • 评论已删除~
  • 评论已删除~
  • Cinque Terre

    waitFor

    #6 7个月前

    @waitFor hello,i think i will change something

  • Cinque Terre

    斗牌传说

    #7 7个月前

    @waitFor 首次评论

  • Cinque Terre

    胡勒巴图

    #8 6个月前

    @waitFor 很好

  • 评论已删除~
  • Cinque Terre

    hyman

    #10 3个月前

    哈哈

njphper@copyright From 2014 to 2019-02-17