我的程序有一个map,看起来像下面这样:
fruit_map := map[string]string {
"apple": "likey",
"orange": "no likey",
}
我想把它颠倒过来,这样它就可以读到下面的内容:
{
"likey": "apple",
"no likey": "orange",
}
值中不存在重复项。而且,我的Map很小-大约200键。我没有找到任何内置的方法来反转这样的Map。有什么办法能快点吗?我对空间的复杂性不太在意,但解决方案需要快速。
谢谢
6条答案
按热度按时间i5desfxk1#
您可以编写一个
for
循环来迭代原始map的键值对,并将它们放入新的map中(请参见函数reverseMap
)Code@https:play.golang.org/p/5y1gABTpdb8
输出:
顺便说一句,像
fruit_map
这样命名go变量是不习惯的,你真的应该使用camel-case,比如fruitMap
。roejwanj2#
其他答案提供了基于直接处理Map的简单解决方案。
另一种解决方案是将双向Map封装为自包含的实用程序,其优点是您可以为其编写全面的单元测试,然后能够通过简单的API依赖它正确操作。
下面是my example implementatio n(它是不完整的,还没有必要的单元测试):
主程序包
wfauudbj3#
你是对的,没有内置的东西来实现这一点,但它真的很简单:
这将输出以下内容:
在playground上查看。如果这是常见的,你总是可以提取到你自己的函数。
hc8w905p4#
没有一个内置的函数可以做到这一点,但是用
for
循环就足够简单了。参见:http://play.golang.org/p/BQjqUsf9aU
xfb7svmp5#
另一种选择是使用定制类型并实现
Reverse()
方法。f0brbegy6#
扩展@Dave C的答案,使用泛型