Go有方便的语法来定义数组查找表:
var myTable = [...]string{
'a': "aaaa",
'b': "bbbb",
'z': "zoro",
}在某些情况下(键在已知的范围内,并且不是太大的范围),这是比map更有效的制表方式。但是,很容易在map中查找并查找键是否不在其中。但是要在这个数组中按索引查找,我必须这样做:
if index < len(myTable) {
if val := myTable[index]; val != "" {
// here I know index exists in array and val is its value
}
}有没有更简单/更常见的模式或库函数来做这件事?
发布于 2014-03-24 14:50:17
我不认为这里有任何特殊的内置语法来消除对边界检查的需要。一种选择是将代码包装在自定义类型中。例如:
type StringTable []string
func (st StringTable) Get(i int) string {
if i < 0 || i >= len(st) {
return ""
}
return st[i]
}您仍然可以对自定义类型使用相同的初始化器语法:
myTable := StringTable{
'a': "aaaa",
'b': "bbbb",
'z': "zoro",
}
fmt.Printf("%#v\n", myTable.Get('a'))
fmt.Printf("%#v\n", myTable.Get(-5))
fmt.Printf("%#v\n", myTable.Get('~')) // greater than 'z'你可以在这里使用这个例子:http://play.golang.org/p/nhti2dVE8B
https://stackoverflow.com/questions/22597735
复制相似问题