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: %d\n", 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("%v\n", 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
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值