我不明白 Go 中的 slice 声明。
对于我来说,数组的第一个和第二个元素的声明必须是 0:1。 但它是0:2。为什么?我应该如何从零读到 2 减 1(始终)?
var slice = array[0:2]
最佳答案
slice 边界是 half open ,这对于许多编程语言来说是非常标准的。一个优点是它使范围的长度变得明显 (2-0=2)。具体来说,这样做很常见:
s[start:start+len]
很明显,这会从 slice 中选择 len
个元素,从 start
开始。如果范围完全闭合(包括两个边界),代码中必须有很多 -1
来处理 slice 和子 slice 。
它在 C++ 范围和 Python 等中的工作方式类似。这是来自 C++ answer 的一些推理。 ,归因于 Dijkstra:
您希望范围的大小是一个简单的差异 end - begin;
当序列退化为空序列时,包括下限会更“自然”,而且因为备选方案(不包括下限)需要存在“one-before-the-beginning”标记值.
关于go - 像 [0 :2] 这样的 slice 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54843269/