Двумерные срезы в Go | OTUS

Курсы

Программирование
Java Developer. Professional Highload Architect C++ Developer. Basic Специализация C++ Developer C++ Developer. Professional Java Developer. Basic Kotlin Developer. Basic Microservice Architecture JavaScript Developer. Basic Cloud Solution Architecture Team Lead C# Developer. Professional Алгоритмы и структуры данных Rust Developer C# Developer. Basic NoSQL Выбор профессии в IT
-99%
Python Developer. Basic Python Developer. Professional Базы данных iOS Developer. Professional React.js Developer Scala-разработчик Специализация iOS Unity Game Developer. Basic MS SQL Server Developer Kotlin Backend Developer Node.js Developer Symfony Framework PHP Developer. Basic Буткемп Java Groovy Developer
Специализации Курсы в разработке Подготовительные курсы Подписка
+7 499 938-92-02

Двумерные срезы в Go

GoPro_Headline_970x70-1801-dc9277.png

В языке программирования Go массивы и срезы являются одномерными. Для создания эквивалента 2-мерного массива либо среза надо определить массив массивов либо срез срезов. Давайте посмотрим, как это может выглядеть:

1-20219-9dd1b2.png

Так как срезы имеют переменную длину, то появляется возможность иметь каждый внутренний срез с различной длиной. В том же нашем LinesOfText-примере каждая строка обладает независимой длиной.

2-20219-2c49aa.png

В некоторых случаях может понадобиться выделить двумерный срез. Такая ситуация может возникнуть, например, при обработке сканированных строк пикселей. Выделить 2-мерный срез можно двумя путями:

  1. Первый путь -- выделение каждого среза независимо.
  2. Второй способ заключается в выделении одного массива и указании отдельных срезов в нем.

Какой из этих путей использовать, будет зависеть от конкретного приложения. При этом стоит понимать, что если срезы могут расти либо уменьшаться, то их надо выделять независимо -- это позволит избежать перезаписи следующей строки. В обратном случае более эффективным будет построение объекта с однократной аллокацией.

Рассмотрим эти два способа подробнее. Первый вариант реализации, строка за раз:

3-20219-bf8824.png

Второй вариант реализации -- одно аллоцирование, которое разбито на строки:

4-20219-0ad76b.png

golang_1-20219-a05dbc.jpg

По материалам сайта https://golang-blog.blogspot.com/.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться