【发布时间】:2014-03-17 18:39:37
【问题描述】:
这是在 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];
}
【问题讨论】:
-
至少在函数外声明并赋值
rpMaxRegisters。 -
如果您熟悉 Assembler,您总是可以比较
go tool 6g -S在不同情况下的输出。在您当前的实现中,每次执行LookupRpMax时,Go 都会CALL,runtime.makemap+0(SB)。 -
我在函数外部声明和分配地图时遇到问题。
var m map[uint8]float64 = {0x00 : 32, 0x04 : 2,}导致syntax error: unexpected {错误 -
你应该使用
var m = map[uint8]float{...},示例如下:play.golang.org/p/3ows0DCBXd。 -
谢谢,这是有道理的。我对 Go 声明和初始化的工作方式感到困惑。我同意在函数之外声明它。我假设这个声明将使我们正在编写的 Go 包本地化地图?
标签: go lookup lookup-tables