热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在golang中为哈希映射创建复合键

如何解决《如何在golang中为哈希映射创建复合键》经验,为你挑选了1个好方法。

首先,我对复合键的定义 - 两个或多个值结合起来构成关键.不要混淆数据库中的复合键.

我的目标是在散列表中保存pow(x,y)的计算值(x和y是整数).这是我需要关于如何创建密钥的想法,所以给定x和y,我可以在哈希表中查找,找到pow(x,y).

例如.pow(2,3)=> {key(2,3):8}获取密钥(2,3)的功能/方式是我想弄清楚的.

一般来说,最好的方法是处理键,这是多个值的组合,同时在哈希表中用作键.

谢谢



1> icza..:

最简单,最灵活的方法是使用a struct作为密钥类型,包括您希望成为密钥一部分的所有数据,因此在您的情况下:

type Key struct {
    X, Y int
}

就这样.使用它:

m := map[Key]int{}
m[Key{2, 2}] = 4
m[Key{2, 3}] = 8

fmt.Println("2^2 = ", m[Key{2, 2}])
fmt.Println("2^3 = ", m[Key{2, 3}])

输出(在Go Playground上试试):

2^2 =  4
2^3 =  8

规范:地图类型:您可以使用任何类型作为比较运算符==!=完全定义的键,上面的Key结构类型实现了这一点.

规范:比较运算符:如果所有字段都具有可比性,则结构值可比较.如果相应的非空白字段相等,则两个结构值相等.

一个重要的事情是:你不应该使用指针作为键类型(例如*Key),因为比较指针只比较内存地址,而不是指向的值.

另请注意,您也可以使用数组(而不是切片)作为键类型,但数组不像结构一样灵活.你可以在这里阅读更多相关内容:为什么Go中的数组?

这就是数组的样子:

type Key [2]int

m := map[Key]int{}
m[Key{2, 2}] = 4
m[Key{2, 3}] = 8

fmt.Println("2^2 = ", m[Key{2, 2}])
fmt.Println("2^3 = ", m[Key{2, 3}])

输出是一样的.在Go Playground尝试一下.


推荐阅读
author-avatar
枫叶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有