使用具有任意维度的键定义地图

时间:2017-07-10 09:22:52

标签: dictionary go key

以下代码用于为每对float64创建一个计数器 因为地图的键不能是slice,所以我必须使用数组作为键,这迫使我用常量来定义维度。

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的组合,我不得不将其拆分为两个独立的函数,这使得我的代码非常冗长且难以维护。 你能找到一种方法来简化这个,所以我可以将它扩展到更多维度吗?

感谢任何输入

1 个答案:

答案 0 :(得分:1)

为什么不将切片指针用作键?

您可以使用具有足够大容量的make创建切片,而不超过它的容量,指针将保持不变。

看看这里https://play.golang.org/p/333tRMpBLv,它举例说明了我的建议。看到len< cap不会改变切片的指针,只有当len超过cap时,append才会创建一个新切片。