【发布时间】:2017-07-11 16:42:28
【问题描述】:
以下代码用于为每对 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 的组合,我不得不将其拆分为两个单独的函数,这使我的代码非常冗长且难以维护。 你能找到一种方法来简化它,以便我可以将它扩展到更多维度吗?
感谢您的任何意见
【问题讨论】:
-
您可以使用
[3]float64,并在不使用时将第三个值设置为0(或其他未使用的值)吗?或者使用[4]float64,第一个值是(整数)长度?这些在逻辑上与使用结构相同,但性能可能更高,但代价是更难阅读。 -
我实际上也完成了 [3]float64 案例。我有一个开关来浏览尺寸。因为我想概括,我也有另一种方法,虽然不是那么快。我将输入数据转换为字符串,然后将其连接起来。它使处理时间加倍。但是,对于某些应用程序,它是有效的 :) 感谢您的输入!
标签: dictionary go key