cpp

Срезы. Преобразование массива в слайс

Массивы и слайсы поддерживают операцию извлечения среза, которая возвращает указанный фрагмент в виде слайса. Формат операции:

<Слайс> = <Массив или слайс>[<Начало>:<Конец>]

Параметры <Начало> и <Конец> являются необязательными. Если параметр <Начало> не указан, то используется значение 0. Если параметр <Конец> не указан, то возвращается фрагмент до конца массива или слайса. Следует также заметить, что элемент с индексом, указанном в этом параметре, не входит в возвращаемый фрагмент.

Теперь рассмотрим несколько примеров. Сначала получим все элементы:

arr1 := [5]int{1, 2, 3, 4, 5}
arr2 := arr1[:]           // arr2 := arr1[0:len(arr1)]
fmt.Println(arr2)         // [1 2 3 4 5]
fmt.Printf("%T\n", arr2)  // []int

По существу мы преобразовали массив в слайс. Следует учитывать, что все операции доступа к элементам слайса отразятся на исходном массиве:

arr2[0] = 88
fmt.Println(arr1)         // [88 2 3 4 5]
fmt.Println(arr2)         // [88 2 3 4 5]

Благодаря этому мы можем передавать массив в то место, где ожидается слайс. Например, выполним сортировку массива:

arr := [5]int{5, 6, 1, 10, 3}
sort.Ints(arr[:])
fmt.Println(arr)          // [1 3 5 6 10]

Получим слайсы без первого и последнего элементов исходного слайса:

arr1 := []int{1, 2, 3, 4, 5}
arr2 := arr1[1:]             // Без первого элемента
fmt.Println(arr2)            // [2 3 4 5]
arr3 := arr1[:len(arr1) - 1] // Без последнего элемента
fmt.Println(arr3)            // [1 2 3 4]

Получим первые два элемента:

arr1 := []int{1, 2, 3, 4, 5}
arr2 := arr1[0:2]            // Символ с индексом 2 не входит в диапазон
fmt.Println(arr2)            // [1 2]

А теперь получим последний элемент:

arr1 := []int{1, 2, 3, 4, 5}
arr2 := arr1[len(arr1) - 1:] // Последний элемент
fmt.Println(arr2)            // [5]

И, наконец, выведем фрагмент от второго элемента до четвертого включительно:

arr1 := []int{1, 2, 3, 4, 5}
arr2 := arr1[1:4]  // Возвращаются элементы с индексами 1, 2 и 3
fmt.Println(arr2)  // [2 3 4]

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Реквизиты

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp