Golang - 对比Python-Dict之Map

接上文slice方法,本文对比python中的dict实现map的方法

文末有彩蛋,送道面试题,请在评论区附上你的答案…

  • dict.clear() 删除字典中所有元素
  • dict.copy() 返回字典(浅复制)的一个副本
  • dict.get(key,default=None) 对字典dict中的键key,返回它对应的值value,如果字典中不存在此键,则返回default 的值(注意,参数- default 的默认值为None)
  • dict.has_key(key) 如果键(key)在字典中存在,返回True,否则返回False
  • dict.items() 返回一个包含字典中(键, 值)对元组的列表
  • dict.keys() 返回一个包含字典中键的列表
  • dict.values() 返回一个包含字典中所有值的列表
  • dict.pop(key[, default]) 和方法get()相似,如果字典中key 键存在,删除并返回dict[key],如果key 键不存在,且没有给出default 的值,引发KeyError 异常。

clear()方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
func clear(ms map[string]interface{}) map[string]interface{} {
// // Method - I , say book is name of map
// for k := range book {
// delete(book, k)
// }

// // Method - II
// book = make(map[string]int)

// // Method - III
// book = map[string]int{}
ms = make(map[string]interface{})
return ms
}

copy()方法

1
2
3
4
5
6
func copy(dst, src map[string]interface{}) map[string]interface{} {
for k, v := range src {
dst[k] = v
}
return dst
}

haskey()方法

1
2
3
4
5
6
7
8
func haskey(ms map[string]interface{}, key string) bool {
for k := range ms {
if k == key {
return true
}
}
return false
}

keys()方法

1
2
3
4
5
6
7
func keys(ms map[string]interface{}) []string {
var keys = []string{}
for k := range ms {
keys = append(keys, k)
}
return keys
}

values()方法

1
2
3
4
5
6
7
func values(ms map[string]interface{}) []interface{} {
var values = []interface{}{}
for _, v := range ms {
values = append(values, v)
}
return values
}

pop()方法

1
2
3
4
5
6
7
func pop(ms map[string]interface{}, key string) interface{} {
v := ms[key]
if v != nil {
delete(ms, key)
}
return v
}

彩蛋

1
2
3
4
5
6
7
8
9
10
11
func calc(x, y int) int {
fmt.Println(x, y, x+y)
return x + y
}
func run() {
a := 1
b := 2
defer calc(a, calc(a, b))
a = 0
defer calc(a, calc(a, b))
}

Golang - 对比Python-Dict之Map
https://www.boer.xyz/2017/08/24/golang-map-methods/
作者
boer
发布于
2017年8月24日
许可协议