【问题标题】:Are len(string) and len(slice)s O(1) operation in Go?Go 中的 len(string) 和 len(slice)s O(1) 操作吗?
【发布时间】:2019-12-27 00:04:54
【问题描述】:
var s string
var slice []int

len(s)
len(slice)

len() 调用 strings 和切片,O(1)。

thisgolang官博可以看到切片有长度、容量和指向底层数组的指针。所以我明白了,它上面的 len() 可能是一个 O(1) 操作。但是字符串呢?字符串的长度是否也在内部与数据相关联,因此 len() 只是查找并返回它?

我查看了源代码builtin.go,但无法从中得出任何结论。

【问题讨论】:

    标签: go


    【解决方案1】:

    字符串header 包含一个指向后备数组的指针和一个长度。

    len() 函数从 stringslice 标头返回长度字段。这是一个 O(1) 操作。

    关于builtin.go。文件说:

    Package builtin 为 Go 的预声明标识符提供了文档。 此处记录的项目实际上不在内置包中 但是他们在这里的描述允许 godoc 提供文档 用于语言的特殊标识符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      • 2014-11-10
      • 2015-07-24
      • 1970-01-01
      • 2011-08-07
      • 2010-09-20
      • 1970-01-01
      相关资源
      最近更新 更多