【发布时间】:2019-07-17 12:04:40
【问题描述】:
我不懂 Go 中的切片声明。
对于我来说,数组的第一个和第二个元素的声明必须是 0:1。 但它是 0:2。为什么?我应该怎么读这个,从 0 到 2 减 1(一直)?
var slice = array[0:2]
【问题讨论】:
我不懂 Go 中的切片声明。
对于我来说,数组的第一个和第二个元素的声明必须是 0:1。 但它是 0:2。为什么?我应该怎么读这个,从 0 到 2 减 1(一直)?
var slice = array[0:2]
【问题讨论】:
切片边界是half open,这对于许多编程语言来说是非常标准的。一个优点是它使范围的长度变得明显(2-0=2)。具体来说,这样做很常见:
s[start:start+len]
很明显,这会从切片中选择len 元素,从start 开始。如果范围完全封闭(包括两个边界),代码中必须有很多 -1s 来处理切片和子切片。
它在 C++ 范围和 Python 等中的工作方式类似。这是来自 C++ answer 的一些推理,归因于 Dijkstra:
您希望范围的大小是一个简单的差异 end - begin;
当序列退化为空序列时,包括下限更“自然”,并且还因为替代方案(不包括下限)需要存在“一个在开始之前”的标记值.
【讨论】:
切片是通过指定两个索引来形成的,一个下限和上限, 用冒号隔开:
a[low : high]这会选择一个半开范围,其中包括第一个 元素,但不包括最后一个。
这是来自 Golang 的切片页面https://tour.golang.org/moretypes/7
【讨论】:
int a[10] 创建元素 0-9。