Go语言入门-常用数据结构之字典-map

Go语言入门-常用数据结构-映射-map

定义

概述

A map is an unordered group of elements of one type, called the element type, indexed by a set of unique keys of another type, called the key type. The value of an uninitialized map is nil.–字典是一种类型的无序元素组,称为元素类型,由唯一键(称为键类型)索引关联其他类型组成。 未初始化映射的值为nil。引用类型。

1.key必须是支持相等运算符 ("=="、"!=") 类型, 如 number、string、 pointer、array、struct,以及对应的 interface。值可以是任意类型,没有限制。
2. map类型的变量默认初始值为nil,需要使用make()函数来分配内存。或者使用初始化表达式,进行初始化。否则会发生panic(map类型的变量默认初始值为nil,需要使用make()函数来分配内存)
3. map是 not addressable不能直接修改value的值
4. 创建时准备足够内存,能够减少扩张的内存分配和重复哈希的动作。
5. map是并发不安全的。

map定义语法
    var mapVal map[Type]Type //声明map
    var mapVal map[Type]Type = map[Type]Type {
    //表达式初始化
        "key1" : value1,
        ...
        "keyN" : valueN,
    }
    var mapVal map[Type]Type = make(map[Type]Type) //make 不指定容量cpa
    var mapVal map[Type]Type = make(map[Type]Type, cap) //make 指定容量
map定义示例
  • 示例1
    普通map的声明,实际引用的都是nil
func main() {
   
    //普通map声明,不初始化
    var map1 map[int]string
    var map2 map[interface{
   }]string
    //实际都是引用nil
    fmt.Printf("%#v\n", map1)
    //实际值都是引用nil
    fmt.Printf("%#v\n", map2)
}
/**
output:
map[int]string(nil)
 */
  • 示例2
    map使用初始化表达式进行初始化。
func main() {
   
    //声明
    var map1 map[int]string
    //表达式初始化
    map1 = map[int]string{
   
        1 : "hello",
        2 : "hello1",
        3 : "hello2",
    }
    fmt.Printf("%#v\n", map1)
    //interface空接口可以映射int
    //声明+表达式初始化
    var map2 map[interface{
   }]int = map[interface{
   }]int{
   
        1 : 1,
        2 : 2,
        3 : 3,
    }
    fmt.Printf("%#v\n", map2)
}
/**
output:
map[int]string{1:"hello", 2:"hello1", 3:"hello2"}
map[interface {}]int{1:1, 2:2, 3:3}
 */

  • 示例3
    通过make定义map不带容量
  • TODO 不带容量的map初始map是多少?
func main() {
   
    //make定义了一个map,该map初始没有值。
    map1 := make(map[string]int)
    fmt.Printf("%#v\n", map1)
    map1["sdff"] = 1
    map1["sdff2"] = 2
    map1["sdff2"] = 3 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值