go---字典的操作和约束 - Go语言中文社区

go---字典的操作和约束


go 的字典类型是一个哈希表的特定实现,键的类型是受限的,但元素可以是任意类型的。

字典的用法:

package main

import "fmt"

func main(){
	aMap := map[string]int {
		"one": 1,
		"two": 2,
		"three": 3,	
	}

	k := "two"
	v, ok := aMap[k]
	if ok {
		fmt.Printf("The element of key %q: %dn", k, v)
	} else {
		fmt.Println("Not found!")
	}
}

在这里插入图片描述
字典的键不能是哪些类型?

函数类型、字典类型和切片类型。因为键类型必须支持判等操作。

错误示例:

package main

import "fmt"

func main(){
	//var badMap1 = map[[]int]int{}  // 引发编译错误

	var badMap2 = map[interface{}]int {
		"1": 1,
		[]int{2}: 2,  // 引发 panic
		3: 3,
	}
	fmt.Printf("%vn", badMap2)
}

应优先考虑哪些类型作为字典的键类型?

求哈希和判等操作的速度越快,对应的类型就越适合作为键类型。

对于所有的基本类型、指针类型、以及数组类型、结构体类型和接口类型均可作为键。

应优先选用数值类型和指针类型作为键。

在值为 nil 的字典上执行读操作会成功吗?写操作呢?

仅声明而不初始化一个字典类型的变量时,它的值是 nil。
除了添加键值元素对,在值为 nil 的字典上做任何操作都不会引起错误。

package main

import "fmt"

func main(){
	var m map[string]int
	
	key := "two"
	elem, ok := m[key]  // 读取,正常
	delete(m, key)  // 删除,正常
	m["two"] = elem  // 添加,引发 panic
}
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/u012319493/article/details/88559793
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 21:03:38
  • 阅读 ( 667 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢