【go语言】复杂数据类型——Map

1. Map

在 Go 语言中,map 是一种键值对(key-value pair)的数据结构,类似于其他语言中的哈希表或字典。

1.1 定义

  • map 是一种无序的集合,键(key)是唯一的,值(value)可以重复。
  • 键必须是可比较的类型(如 stringintfloat64bool, 或指针等)。
  • 值可以是任意类型。

1.2 声明与初始化

var m map[string]int // 声明一个 map,此时 m 的值为 nil

m = make(map[string]int,cap) // 初始化 map

其中cap表示map的容量,该参数虽然不是必须的,但是我们应该在初始化map的时候就为其指定一个合适的容量。

或者直接声明并初始化:

m := make(map[string]int)

map也支持在声明的时候填充元素,例如:

m := map[string]int{
    "apple":  1,
    "banana": 2,
    "cherry": 3,
}

1.3 检查键是否存在

//如果key存在,exists为true,value为对应的值;
//不存在exists为false,value为值类型的零值
value, exists := m["apple"]
if exists {
    fmt.Println("Key exists:", value)
} else {
    fmt.Println("Key does not exist")
}

1.4 删除键值对

delete(m, "apple") // 删除键 "apple" 及其对应的值

1.5 遍历map

(1)使用for...range遍历
for key, value := range m {
    fmt.Println(key, value)
}
  • 遍历时会同时获取键和值。
  • 遍历顺序是随机的(Go 1.12+ 默认随机化遍历顺序)。
(2)按特定顺序遍历

如果需要按特定顺序(如字典序)遍历,可以将键提取到切片中并排序:

m := map[string]int{
    "apple":  1,
    "banana": 2,
    "cherry": 3,
}
//创建切片
keys := make([]string, 0, len(m)) 
for key := range m {
    keys = append(keys, key)//将m中每个键追加到切片keys中
}
//对切片进行字典序排序
sort.Strings(keys)   
for _, key := range keys { //省略索引
    //对于每个键key,从m中获取对应值m[key]
    fmt.Println(key, m[key])
}

1.6  元素为 map 类型的切片

(1)定义

  • 这种数据结构是一个切片,其中每个元素都是一个 map
  • 结构形式:
    []map[KeyType]ValueType

(2)声明和初始化

// 声明一个元素为 map 的切片
var sliceOfMaps []map[string]int 

// 初始化
sliceOfMaps = make([]map[string]int, 3)

// 为切片中每个 map 分配内存
for i := range sliceOfMaps {
    sliceOfMaps[i] = make(map[string]int,10)
}
sliceOfMaps[0]["apple"] = 5
sliceOfMaps[0]["banana"]  = 3
sliceOfMaps[1]["cherry"]  = 8
sliceOfMaps[1]["date"]  = 6
sliceOfMaps[2]["elderberry"]  = 7

// 或者直接使用字面量初始化
sliceOfMaps = []map[string]int{
    {"apple": 5, "banana": 3},
    {"cherry": 8, "date": 6},
    {"elderberry": 7},
}

for index,value := range sliceOfMaps {
    fmt.Printf("index:%d value:%v\n",index,value)
}

输出结果:

index:0 value:map[apple:5 banana:3]
index:1 value:map[cherry:8 date:6]
index:2 value:map[elderberry:7]

 1.7 值为slice类型的map

(1)定义

  • 这种数据结构是一个 map,其中每个键对应的值是一个切片。
  • 结构形式:
    map[KeyType][]ValueType

(2)声明和初始化

// 声明一个值为 slice 的 map
var mapOfSlices map[string][]int 

// 初始化
mapOfSlices = make(map[string][]int,3)

// 或者直接使用字面量初始化
mapOfSlices = map[string][]int{
    "fruits":   {5, 3, 8},
    "vegetables": {6, 7},
}
for index, value := range mapOfSlices {
	fmt.Println(index, value)
}

输出结果:

fruits [5 3 8]
vegetables [6 7]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值