【Goalng】数组可以作为map的key!
在Go语言中,数组可以作为map的key,这是Go语言的一个特性。
数组作为map key的特性
1. 数组是值类型,不是指针
1 | a := [3]int{1, 2, 3} |
2. 数组是可比较的(comparable)
Go语言中,数组支持 == 和 != 操作符:
1 | a := [3]int{1, 2, 3} |
3. 因此数组可以作为map key
1 | // 这是合法的 |
与切片的对比
切片不能作为map key:
1 | // 这会编译错误 |
因为切片是引用类型,比较的是地址而不是内容。
在2352. 相等行列对题目代码中的应用
1 | cnt := map[[200]int]int{} |
为什么这样设计?
- 值语义:数组比较的是内容,不是地址
- 确定性:相同的数组内容总是产生相同的key
- 性能:数组长度固定,哈希计算更高效
注意事项
- 数组长度是类型的一部分,
[3]int和[4]int是不同的类型 - 大数组作为key可能会有性能开销(拷贝成本)
- 在这个题目中,由于n ≤ 200,使用固定长度数组是可行的
这种设计使得我们可以用数组的内容作为唯一标识,从而高效地统计和查找匹配的行列对。
1 | --- |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Lei Qi's Blog!
评论
