Объявления срезов, такие как [0: 2] - PullRequest
0 голосов
/ 23 февраля 2019

Я не понимаю объявления срезов в Go.

Для меня объявление для первого и второго элемента массива должно быть 0: 1.Но это 0: 2.Зачем?Как мне прочитать это, от нуля до 2 минус 1 (все время)?

var slice = array[0:2]  

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Срез формируется путем указания двух индексов, нижней и верхней границ, разделенных двоеточием:

a[low : high]

. Выбирает полуоткрытый диапазон, который включаетпервый элемент, но исключает последний.

Это со страницы Голанга на ломтиках https://tour.golang.org/moretypes/7

0 голосов
/ 23 февраля 2019

Границы среза полуоткрыты , это очень стандартно для многих языков программирования.Одним из преимуществ является то, что он делает длину диапазона очевидной (2-0 = 2).В частности, это обычно делают:

s[start:start+len]

И очевидно, что это выбирает len элементов из среза, начиная с start.Если диапазон будет полностью закрыт (включая обе границы), в коде должно быть много -1 s для обработки срезов и сублицензий.

Он работает аналогично в диапазонах C ++, Python и т. Д.Вот несколько рассуждений из ответа C ++ , приписываемого Дейкстре:

  • Вы хотите, чтобы размер диапазона был простой разницей - начало;

  • , включая нижнюю границу, является более "естественным", когда последовательности вырождаются в пустые, а также потому, что альтернатива (исключая нижнюю границу) потребует существования "один перед началом""часовой показатель.

...