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

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

В языке программирования 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 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто