首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Go数组中的查找模式

Go数组中的查找模式
EN

Stack Overflow用户
提问于 2014-03-24 06:04:31
回答 2查看 136关注 0票数 3

Go有方便的语法来定义数组查找表:

代码语言:javascript
运行
复制
var myTable = [...]string{
  'a': "aaaa",
  'b': "bbbb",
  'z': "zoro",
}

在某些情况下(键在已知的范围内,并且不是太大的范围),这是比map更有效的制表方式。但是,很容易在map中查找并查找键是否不在其中。但是要在这个数组中按索引查找,我必须这样做:

代码语言:javascript
运行
复制
if index < len(myTable) {
  if val := myTable[index]; val != "" {
    // here I know index exists in array and val is its value
  }
}

有没有更简单/更常见的模式或库函数来做这件事?

EN

Stack Overflow用户

发布于 2014-03-24 14:50:17

我不认为这里有任何特殊的内置语法来消除对边界检查的需要。一种选择是将代码包装在自定义类型中。例如:

代码语言:javascript
运行
复制
type StringTable []string

func (st StringTable) Get(i int) string {
    if i < 0 || i >= len(st) {
        return ""
    }
    return st[i]
}

您仍然可以对自定义类型使用相同的初始化器语法:

代码语言:javascript
运行
复制
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

票数 3
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22597735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档