是否可以使用切片作为键?
有我的尝试:
h := map[[]string]string{ []string{"a", "b"} : "ab", }
编译器给我一个错误invalid map key type []string
.所以要么它不可能,要么我声明错误(如果是这样,那将是一个正确的方法?).
Volker已经告诉过这是不可能的,我将通过规范中的例子给出一些更详细的信息.
地图规格告诉您:
必须为键类型的操作数完全定义比较运算符==和!=; 因此,键类型不能是函数,映射或切片.
它已经告诉你切片不能是一个键,但你也可以在比较规范中检查它:
切片,贴图和函数值无法比较.
这意味着切片也不能成为密钥,数组也可以是密钥.例如,您可以写:
h := map[[2]string]string{ [2]string{"a", "b"} : "ab", }
不,切片不能用作映射键,因为没有定义相等.
但是,可以使用数组作为映射键:
package main import "fmt" func main() { m := make(map[[2]int]bool) m[[2]int{1, 2}] = false fmt.Printf("%v", m) }