这是在Go中实现查找表的合适方法吗?有没有更好的方法?如果条目恰好是非连续的,我希望这样做。
func LookupRpMax(val uint8) float64 {
rpMaxRegisters := map[uint8]float64 {
0x00 : 3926991,
0x01 : 3141593,
0x02 : 2243995,
0x03 : 1745329,
0x04 : 1308997,
0x05 : 981748,
0x06 : 747998,
0x07 : 581776,
0x08 : 436332,
0x09 : 349066,
0x0A : 249333,
0x0B : 193926,
0x0C : 145444,
0x0D : 109083,
0x0E : 83111,
0x0F : 64642,
0x10 : 48481,
0x11 : 38785,
0x12 : 27704,
0x13 : 21547,
0x14 : 16160,
0x15 : 12120,
0x16 : 9235,
0x17 : 7182,
0x18 : 5387,
0x19 : 4309,
0x1A : 3078,
0x1B : 2394,
0x1C : 1796,
0x1D : 1347,
0x1E : 1026,
0x1F : 798,
}
return rpMaxRegisters[val];
}
答案 0 :(得分:1)
如果您愿意,可以使用平面切片 - 那么对于没有条目的条目,您只需要null / 0。如果您的非连续值可以达到非常高的值,那么这种方法会很糟糕。
使用此代码:http://play.golang.org/p/gLni-BzMKy
在切片和地图上运行100,000,000个索引后,我得到了这些结果: 地图:3062 ms切片:56 ms
话虽如此 - 在几乎任何现实世界的用例中,速度差异都无关紧要。我个人会使用地图。
编辑:我同意其他评论说要在函数外部初始化地图,所以它只需要构建一次而不是每次调用。