Dictionary 使用任意尺寸的键定义贴图

Dictionary 使用任意尺寸的键定义贴图,dictionary,go,key,Dictionary,Go,Key,以下代码用于为每对浮点64创建一个计数器。 因为映射的键不能是,所以我必须使用数组作为键,这迫使我用常量定义维度 counter := make( map[ [2]float64 ] int ) for _, comb := range combinations{ //combinations is a [n][2]float64 for _, row := range data{ counter[ [...]float64{ row[comb[0]] , row[c

以下代码用于为每对浮点64创建一个计数器。
因为映射的键不能是,所以我必须使用数组作为键,这迫使我用常量定义维度

counter := make( map[ [2]float64 ] int )
for _, comb := range combinations{ //combinations is a [n][2]float64
    for _, row := range data{  
        counter[ [...]float64{ row[comb[0]] , row[comb[1]] } ]++
    }
}
话虽如此,是否有办法使此地图取决于键的长度(取决于组合的尺寸?
我尝试使用一个结构作为键,但据我所知(我可能错了),它的速度稍微慢了一点……出于我的目的(将此应用于所有组合~n!),这不是理想的解决方案

现在我只考虑大小为2和3的组合,我不得不将其分为两个单独的函数,这使得我的代码非常冗长,并且更难维护。 你能找到一种方法来简化它,这样我就可以把它扩展到更多的维度吗


感谢您的任何输入

为什么不使用指向切片的指针作为键呢


您可以使用make创建一个具有足够大容量的切片,但在不超过其容量的情况下,指针将保持不变


看看这里,它是我建议的一个例子。请注意,虽然len可能我缺少这个实现。我打算为切片中的值创建一个计数器。如果我创建一个指向切片的指针,它将是一个新的值ime,并且所有条目的计数器都将为1。有没有一种简单的方法可以做到这一点,我没有看到?你可以用make创建一个容量足够大的切片,当你没有超过它的容量时,指针将保持不变。看看这里,它例举了我的建议。请注意,当len[3]float64,并将第三个值设置为0(或其他一些未使用的值)不使用时?或使用
[4]float64
,第一个值是(整数)长度?这些在逻辑上与使用结构相同,但可能更高性能,但代价是更难读取。我实际上有[3]float64案例也完成了。我有一个在维度中导航的开关。因为我想概括,我还有一个替代方法,尽管速度不是很快。我将输入数据转换为字符串,并继续连接它。它将处理时间增加了一倍。但是,对于某些应用程序,它是有效的:)感谢您的输入!