Golang中的Map
发布人:shili8
发布时间:2025-01-09 17:10
阅读次数:0
**Go语言中的 Map**
在 Go语言中,`map` 是一种无序的键值对集合。它类似于 Python 中的字典或 Java 中的 HashMap。`map` 的主要特点是,它可以快速地查找、插入和删除键值对。
### map 结构一个 `map` 由以下几个部分组成:
* **key**: 键类型,必须是可比较的(即实现了 `==` 和 `<` 等方法)。
* **value**: 值类型,可以是任何类型。
* **capacity**: map 的容量,即可以存储的键值对数量。
### map 的使用#### 声明一个 map要声明一个 `map`, 可以使用以下语法:
govar m map[keyType]valueType
其中 `keyType` 和 `valueType` 是类型名称。例如:
govar myMap map[string]int
#### 初始化一个 map可以使用 `make()` 函数初始化一个 `map`:
gomyMap := make(map[string]int)
也可以在声明时直接初始化:
gomyMap := map[string]int{}
#### 添加键值对可以使用以下语法添加键值对:
gom[key] = value
例如:
gomyMap["one"] =1myMap["two"] =2
#### 删除键值对可以使用以下语法删除键值对:
godelete(m, key)
例如:
godelete(myMap, "one")
#### 查找键值对可以使用以下语法查找键值对:
govalue, ok := m[key]
其中 `ok` 是一个布尔类型,表示是否找到该键值对。如果找到,则 `ok` 为 `true`;否则为 `false`。例如:
govalue, ok := myMap["two"] fmt.Println(value) // 输出2fmt.Println(ok) // 输出 truevalue, ok = myMap["three"] fmt.Println(value) // 输出0fmt.Println(ok) // 输出 false
#### map 的长度和容量可以使用以下语法获取 `map` 的长度和容量:
golen(m) cap(m)
例如:
gomyMap := make(map[string]int,10) fmt.Println(len(myMap)) // 输出0fmt.Println(cap(myMap)) // 输出10
### map 的遍历可以使用以下语法遍历 `map`:
gofor key, value := range m { // ... }
例如:
gomyMap := map[string]int{ "one":1, "two":2, } for key, value := range myMap { fmt.Println(key, value) } // 输出: // one1// two2
### map 的清空可以使用以下语法清空 `map`:
gom = make(map[keyType]valueType)
例如:
gomyMap := map[string]int{ "one":1, "two":2, } myMap = make(map[string]int) fmt.Println(myMap) // 输出 {}
### map 的克隆可以使用以下语法克隆 `map`:
gom2 := make(map[keyType]valueType, cap(m)) for k, v := range m { m2[k] = v}
例如:
gomyMap := map[string]int{ "one":1, "two":2, } myMap2 := make(map[string]int) for k, v := range myMap { myMap2[k] = v} fmt.Println(myMap2) // 输出 {one:1 two:2}
### map 的合并可以使用以下语法合并两个 `map`:
gom3 := make(map[keyType]valueType) for k, v := range m { m3[k] = v} for k, v := range m2 { m3[k] = v}
例如:
gomyMap1 := map[string]int{ "one":1, "two":2, } myMap2 := map[string]int{ "three":3, "four":4, } myMap3 := make(map[string]int) for k, v := range myMap1 { myMap3[k] = v} for k, v := range myMap2 { myMap3[k] = v} fmt.Println(myMap3) // 输出 {one:1 two:2 three:3 four:4}
### map 的删除可以使用以下语法删除 `map` 中的某个键值对:
godelete(m, key)
例如:
gomyMap := map[string]int{ "one":1, "two":2, } delete(myMap, "one") fmt.Println(myMap) // 输出 {two:2}
### map 的查找可以使用以下语法查找 `map` 中的某个键值对:
govalue, ok := m[key]
其中 `ok` 是一个布尔类型,表示是否找到该键值对。如果找到,则 `ok` 为 `true`;否则为 `false`。例如:
gomyMap := map[string]int{ "one":1, "two":2, } value, ok := myMap["one"] fmt.Println(value) // 输出1fmt.Println(ok) // 输出 truevalue, ok = myMap["three"] fmt.Println(value) // 输出0fmt.Println(ok) // 输出 false
### map 的长度和容量可以使用以下语法获取 `map` 的长度和容量:
golen(m) cap(m)
例如:
gomyMap := make(map[string]int,10) fmt.Println(len(myMap)) // 输出0fmt.Println(cap(myMap)) // 输出10
### map 的遍历可以使用以下语法遍历 `map`:
gofor key, value := range m { // ... }
例如:
gomyMap := map[string]int{ "one":1, "two":2, } for key, value := range myMap { fmt.Println(key, value) } // 输出: // one1// two2
### map 的清空可以使用以下语法清空 `map`:
gom = make(map[keyType]valueType)
例如:
gomyMap := map[string]int{ "one":1, "two":2, } myMap = make(map[string]int) fmt.Println(myMap) // 输出 {}
### map 的克隆可以使用以下语法克隆 `map`:
gom2 := make(map[keyType]valueType, cap(m)) for k, v := range m { m2[k] = v}
例如:
gomyMap := map[string]int{ "one":1, "two":2, } myMap2 := make(map[string]int) for k, v := range myMap { myMap2[k] = v} fmt.Println(myMap2) // 输出 {one:1 two:2}
### map 的合并可以使用以下语法合并两个 `map`:
gom3 := make(map[keyType]valueType) for k, v := range m { m3[k] = v} for k, v := range m2 { m3[k] = v}
例如:
gomyMap1 := map[string]int{ "one":1, "two":2, } myMap2 := map[string]int{ "three":3, "four":4, } myMap3 := make(map[string]int) for k, v := range myMap1 { myMap3[k] = v} for k, v := range myMap2 { myMap3[k] = v} fmt.Println(myMap3) // 输出 {one:1 two:2 three:3 four:4}
### map 的删除可以使用以下语法删除 `map` 中的某个键值对:
godelete(m, key)
例如:
gomyMap := map[string]int{ "one":1, "two":2, } delete(myMap, "one") fmt.Println(myMap) // 输出 {two:2}
### map 的查找可以使用以下语法查找 `map` 中的某个键值对:
govalue, ok := m[key]
其中 `ok` 是一个布尔类型,表示是否找到该键值对。如果找到,则 `ok` 为 `true`;否则为 `false`。例如:
gomyMap := map[string]int{ "one":1