Ма

Масиви у Perl

1 вправа

Про концепцію Масиви

Масиви та списки містять упорядковану колекцію скалярів. Якщо не використовувати посилання (про них ітиметься в окремій темі), це означає, що масиви та списки завжди пласкі, тобто вони не можуть містити інших масивів чи списків.

Здебільшого списки беруть у дужки (), а їхні елементи розділяють комами ,.

Змінну-масив зазвичай наповнюють, присвоївши їй список, наприклад my @names = ('Alice', 'Bob', 'Charlie');.

До елементів масиву чи списку можна отримати доступ, указавши індекси в дужках, наприклад ('Alice', 'Bob', 'Charlie')[1] # 'Bob'.

Індекси в Perl починаються з 0. Відʼємні індекси відраховуються від кінця масиву чи списку, наприклад ('Alice', 'Bob', 'Charlie')[-1] # 'Charlie'.

Функції

Для роботи з масивами та списками реалізовано багато функцій; серед найкорисніших: grep для нового списку відфільтрованих елементів, які відповідають умові, map для перетворення елементів на новий список значень і sort для нового списку перевпорядкованих елементів.

Функції для зміни масивів охоплюють push для додавання елементів у кінець, pop для вилучення останнього елемента, shift для вилучення першого елемента, unshift для додавання елементів на початок і splice для складніших змін.

Часто доводитиметься й перебирати масиви та списки за допомогою інструкції for(each).

Відмінності сигілів

Коли ми звертаємося до елементів масиву, результат визначає використаний сигіл. Саме дужки [] у кінці назви змінної вказують Perl, що ми звертаємося до масиву з цією назвою.

my @names = ('Alice', 'Bob', 'Charlie');

$names[0]; # 'Alice'      <- A scalar
@names[0]; # ('Alice')    <- A slice (with only one index, this probably isn't what you want. There will be a warning.)
%names[0]; # (0, 'Alice') <- A key/index + value slice

$names[1, 2]; # 'Charlie'                <- A scalar (via unsupported syntax for an ancient feature. Probably not what you want. There will be a warning.)
@names[1, 2]; # ('Bob', 'Charlie')       <- A slice
%names[1, 2]; # (1, 'Bob', 2, 'Charlie') <- A key/index + value slice

Хоча це й дозволено, заради читабельності краще не давати різним типам змінних одну й ту саму назву.

Масиви проти списків

Масиви та списки багато в чому схожі, і в багатьох місцях їх можна використовувати взаємозамінно, але це не одне й те саме. Список - це фіксована й незмінна колекція скалярів. Масив - це колекція скалярів, у якій можна змінювати і вміст, і сам розмір.

У деяких контекстах вони поводяться по-різному. Масив у скалярному контексті дасть нам розмір цього масиву. Список у скалярному контексті дасть останній елемент списку, а можливо, ще й попередження про те, що решту його вмісту використано в порожньому контексті.

my @names = ('Alice', 'Bob', 'Charlie');

scalar @names; # 3
scalar ('Alice', 'Bob', 'Charlie'); # 'Charlie' (and some warnings).

Докладніше можна прочитати в розділі поширених запитань: Чим список відрізняється від масиву?

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці

Вивчити концепцію Масиви

Практика заблокована

Розблокуйте ще 10 вправ, щоб практикувати концепцію Масиви