Шаг 49.
Язык программирования Go.
Изменение срезов

    На этом шаге рассмотрим изменение срезов в Go.

    Для добавления новых значений в конец среза можно использовать встроенную функцию append(). Эта функция принимает срез и одно или более значений добавляемых отдельных элементов. При необходимости добавить содержимое другого среза следует использовать оператор ... (многоточие), чтобы сообщить компилятору Go, что содержимое указанного среза должно добавляться поэлементно. Добавляемые значения должны иметь тот же тип, что и сам срез. При работе со строками оператор многоточия можно использовать для добавления отдельных байтов из строки в срез с байтами.

    Задание 1. Реализовать различные методы добавления элементов в срез (рис.1):


Рис.1. Пример работы приложения

Раскрыть/скрыть решение и комментарии.

    Встроенная функция append() принимает срез и одно или более добавляемых значений и возвращает (возможно, новый) срез, включающий содержимое оригинального среза, плюс указанное значение или значения, находящиеся в последних элементах. Если оригинальный срез имеет достаточную емкость (то есть сумма его длины и количества новых элементов не превышает емкости), функция append() вставит новые значения в конец среза и вернет оригинальный срез с длиной, увеличенной на количество добавленных элементов. Если оригинальный срез имеет недостаточную емкость, функция append() создаст новый срез, скопирует в него элементы из оригинального среза, добавит в конец новые значения и вернет новый срез – именно поэтому необходимо присваивать значение, возвращаемое функцией append(), оригинальной переменной.

    Иногда бывает необходимо вставлять элементы не в конец, а в начало или в середину среза.

    Задание 2. Пример применения пользовательской функции InsertStrCpy(), принимающей срез, куда вставляются элементы, срез, элементы которого требуется вставить, и номер позиции для вставки (рис.2):


Рис.2. Пример работы приложения

Раскрыть/скрыть решение и комментарии.

    Задание 3. Удаление элементов в начале, конце и середине среза.

Раскрыть/скрыть решение и комментарии.

    На следующем шаге рассмотрим функции пакета sort в Go для сортировки и поиска по срезам.


Предыдущий шаг Содержание Следующий шаг