15. 字典(map)类型:使用与内置函数
一个简单的例子如下,这些操作和我们使用 Golang 非常类似:
// 创建mapa = {"a": 234, "b": "sasdfasdf", "ccc": "13"}
// 获取长度println("len(a): ", len(a)) // len(a): 3
// 获取键值方法1println(`a["b"]: `, a["b"]) // OUTPUT: a["b"]: sasdfasdf
// 获取键值方法2println(`a["b"]: `, a.b) // OUTPUT: a["b"]: sasdfasdf
// 获取键值方法3 $ 间接访问v = "b"println(`a.$v: `, a.$v) // OUTPUT: a.$v: sasdfasdf
// 获取键值方法3(不存在时获取默认值)f = "f" in a ? a["f"] : "fffff" // f = "fffff"
// 获取键值方法4(不存在时获取默认值)// get函数 第一个参数为map,第二个参数为键,第三个参数为取不到键值时的默认值g = get(a, "g", "ggggg") // g = "ggggg"
// 拆包,解包a["e"], a["f"], a["g"] = 4, 5, 6a.e, a.f, a.g = 4, 5, 6
// 删除键值// delete函数 第一个参数为map,第二个参数是要删除的键delete(a, "b")println(`a: `, a) // map[a:234 ccc:13 e:4 f:5 g:6]
// 判断元素是否存在方法1if a["b"] != nil { // 注意,这里不能使用a.b,因为如果不存在该键则会直接panic println("key b in a")}
// 判断元素是否存在方法2if "b" in a { println("key b in a")}
// 内置方法a = {"a":1,"b":2}
// Keys:返回一个包含所有键的列表,注意其每次调用返回的顺序可能是不相同的v = a.Keys()v.Sort()assert v == ["a", "b"], v
// Values:返回一个包含所有键值的列表,注意其每次调用返回的顺序可能是不相同的v = a.Values()v.Sort()assert v == [1, 2], v
// Entries / Items:返回一个包含所有键值对的二维数组,其中每个元素是一个长度为2的数组// 其第一个元素为键,第二个元素为键值for k, v in a.Items() { assert k in ["a","b"] assert v in [1,2]}
// Foreach:使用一个函数来遍历map中所有的键值a.ForEach(func(k,v){ assert k in ["a","b"] assert v in [1,2]})
// Set:设置键值, 如果key不存在则添加a.Set("c",3)assert a["c"] == 3
// Remove / Delete:删除对应键值a.Remove("a")
// Has:判断对应键是否存在于字典中assert a.Has("a") == falseassert a.Has("c") == true
#
附录:字典内置方法方法名 | 描述 |
---|---|
Keys() | 返回一个包含所有键的列表,注意其每次调用返回的顺序可能是不相同的 |
Values() | 返回一个包含所有键值的列表,注意其每次调用返回的顺序可能是不相同的 |
Entries() / Items() | 返回一个包含所有键值对的二维数组,其中每个元素是一个长度为2的数组,其第一个元素为键,第二个元素为键值 |
ForEach(func(key, value)) | 会根据提供的函数对字典中的每一个键值做映射,注意其每次映射的顺序可能是不相同的 |
Set(key, value) | 设置键值,如果key不存在则添加 |
Remove(key) | 删除对应键值 |
Has(key) | 判断对应键是否存在于字典中 |