以下代码用于为每对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的组合,我不得不将其拆分为两个独立的函数,这使得我的代码非常冗长且难以维护。 你能找到一种方法来简化这个,所以我可以将它扩展到更多维度吗?
感谢任何输入
答案 0 :(得分:1)
为什么不将切片指针用作键?
您可以使用具有足够大容量的make创建切片,而不超过它的容量,指针将保持不变。
看看这里https://play.golang.org/p/333tRMpBLv,它举例说明了我的建议。看到len< cap不会改变切片的指针,只有当len超过cap时,append才会创建一个新切片。