Map 如何使用任意长度的值序列作为Go中的映射键?

Map 如何使用任意长度的值序列作为Go中的映射键?,map,go,Map,Go,编辑:杰里米·沃尔帮助我意识到我问了一个比我想问的更具体的问题;这里有一个更好的版本 假设我想表示一个表,将某个类型B的值与某个类型a的值序列相关联,定义了等式。在围棋中最好的方法是什么 显然,对于表,我希望使用Go映射,但是对于类型a的值序列,我可以使用什么呢?切片不能用作Go中地图的关键点;数组可以,但数组的长度是其类型的一部分,我对能够使用运行时确定的长度序列感兴趣。我可以(1)使用A的数组声明它们的最大长度,或者(2)使用A的片,将它们序列化为字符串以用作键(Awk和Lua程序员熟悉这种

编辑:杰里米·沃尔帮助我意识到我问了一个比我想问的更具体的问题;这里有一个更好的版本

假设我想表示一个表,将某个类型B的值与某个类型a的值序列相关联,定义了等式。在围棋中最好的方法是什么

显然,对于表,我希望使用Go映射,但是对于类型a的值序列,我可以使用什么呢?切片不能用作Go中地图的关键点;数组可以,但数组的长度是其类型的一部分,我对能够使用运行时确定的长度序列感兴趣。我可以(1)使用A的数组声明它们的最大长度,或者(2)使用A的片,将它们序列化为字符串以用作键(Awk和Lua程序员熟悉这种技术…)。对于围棋的这个“特性”,有没有比我描述的更好的解决方法


正如杰里米·沃尔(Jeremy Wall)在回答我最初的问题时所指出的,我有A=int,选项(2)对整数很好,因为你可以使用符文片段,而转换成字符串只是一个转换。

符文序列而不是整数对你有用吗?符文是uint32,转换为字符串只是一个强制转换:

package main

import "fmt"

type myKey struct {
  seq []int
}

func main() {
    m := make(map[string]string)
    key := []rune{1, 2}
    m[string(key)] = "foo"
    fmt.Print("lookup: ", m[string(key)])
}

您可以在这里使用以下代码:

我在下面给出了“一个”答案,但这个问题实在太具体了,无法给出任何类型的答案。知道你具体想回答什么问题会有帮助。这是问题过于具体的一个好观点。我的想法是提到整数只是为了给出一个具体的例子,但我没想到会有一个真正好的简单的整数解决方案,它对其他类型不起作用。谢谢,这是一个巧妙的技巧!为了确保我理解:这里的变量“key”是rune的slice类型,对吗?这很好地涵盖了整数序列的情况,但尽管这让我改进了我编写的程序(枚举了给定长度的所有内容),但我的意思是更一般地问值序列的问题,这些值序列不一定只是32位整数。是的,关键是一段符文。请记住,符文是无符号32位整数。如果你的整数序列符合这个条件,那么它们就可以代表一个整数片段。如果你的序列都是相同长度的,你可以使用一个最合适的数字类型的数组。那是数组而不是切片。数组是有效的映射键(在限制范围内…数字类型的数组没有问题。)甚至可能比切片稍快。