Урок пятый: Массивы

Введение в Ruby [HEXLET]

Что было в видео

Массивы являются очень распространённой структурой данных в среде программирования и присутствуют во многих языках. Руби — не исключение.

В целом массивы и применяемые к ним методы существенно облегчают написание программ и работу с данными.

Для того что бы объявить пустой массив достаточно просто напечатать пустые квадратные скобки.

Для добавления элементов в массив используется простое перечисление через запятую. При этом тип элементов в массиве — не важен. Это значит что в массиве могут перечисляться как числа, так и строки или символы.

Урок пятый: Массивы
Пример произвольного массива в Ruby.

Для того что бы получить явный срез по массиву (его еще называют slice) достаточно указать порядковые номера элементов массива в команде.

В отличии от массива, срез массива, который является частью основного массива можно изменять по длине — количеству элементов массива.

Добавление нового элемента в массив

Для того что бы добавить новый элемент в массив необходимо использовать двойной знак «Меньше» (<<) по отношению к переменной которой присвоен массив. Новый элемент массива будет добавлен в конец массива.

Урок пятый: Массивы

Удаление элемента из массива

Для того что бы удалить элемент из массива мы можем использовать два метода:

Удаление элемента из массива по значению

Для удаления элемента из массива используется метод .delete с явным указанием значения элемента массива.

Урок пятый: Массивы
Пример удаления элемента из массива.

Удаление элемента из массива по индексу

Для удаления элемента по индексу используется метод .delete_at(1). В скобках мы передаем индекс удаляемого элемента.

Урок пятый: Массивы
Демонстрация удаления элемента массива по индексу.

Изменение элемента в массиве

Для того что бы изменить элемент в массиве нам необходимо указать переменную, которой присвоен массив и в квадратных скобках указать порядковый номер изменяемого элемента. далее поставить знак = и указать новое значение для элемента.

Урок пятый: Массивы
Пример изменения значения выбранного элемента в массиве.

Как узнать содержится ли нужный элемент в массиве

Для того что бы узнать содержится ли исковый элемент в массиве используется метод .member?. Если элемент в массиве, то нам вернётся true. В обратном случае — false.

Урок пятый: Массивы
Пример использования метода .member? для уточнения есть ли исковый элемент в массиве.

Обращение массива: изменить порядок элементов в массиве на обратный

Для изменения порядка элементов в массиве в обратном порядке используется метод .reverse. ранее я уже изучал этот метод в уроке про строки.

Урок пятый: Массивы
Пример использования метода .reverse для изменения порядка элементов массива в обратную сторону.

Сложение и вычитание массивов

Для сложения массивов используется арифметический знак ПЛЮС (+), а для вычитания — МИНУС (-). Как я понял из книг, плюс и минус тоже по сути своей являются МЕТОДАМИ.

При сложении массивов (конкатенация) происходит объединение в один новый массив.

Урок пятый: Массивы
Демонстрация метода сложения массивов (+).

При вычитании массивов — из первого массива удаляются все элементы, которые есть во втором, независимо от их количества. Остальные элементы массива — сохраняются без изменений.

Урок пятый: Массивы
Практический пример вычитания массивов (-).

Объединение и пересечение массивов (как множеств)

Понятие множество — пришло из математики. По сути множество подразумевает под собой совокупность (собрание) объектов = массив.

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

Урок пятый: Массивы
Демонстрация логического объединения массивов как множеств.

Пересечение массивов это метод удаления из первого массива всех элементов, которые присутствуют во втором массиве. Для реализации пересечения используется метод &.

Урок пятый: Массивы
Пример пересечения массивов.

Присваивание = сохранение элементов массива в переменные

Для сохранения элементов массива в переменные мы можем использовать три способа.

Первый вариант

Явное присваивание по средствам конструкции с объявлением переменной и присваивания через знак равенства. далее указывается переменная, которой присвоен массив и в квадратных скобках мы передаём порядковый номер элемента массива, который нужно присвоить новой переменной.

Урок пятый: Массивы
Демонстрация простого присваивания элемента массива.

Второй вариант

Если нам нужно присвоить элементы массива сразу нескольким переменным, иногда удобней просто перечислить новые переменные через запятую, а затем присвоить им массив.

Урок пятый: Массивы
Пример присваивания элементов массива с перечислением переменных.

Третий вариант

Присваивание переменной всех свободных элементов массива, которые не присвоены другим переменным — для этого нам достаточно просто добавить к имени переменной звёздочку (*). По средствам звёздочки мы как бы говорим присвоить все остальные элементы массива.

Урок пятый: Массивы
Пример присваивания переменной всех элементов массива через звёздочку.

Практическое задание

В этот раз я тупил в конце практики. Мне нужно было присвоить переменной срез массива. В задании конкретно говорилось: «Присвойте переменной ar6 срез со второго по четвертый индекс массива ar5» я пытался решить при помощи изученных в видео уроке методов, но тесты не проходили.

Урок пятый: Массивы
Тесты не прошли. Нужно искать ошибку в программе.
require 'wrong/assert'
include Wrong::Assert
Wrong.config.color

ar1 = [3, 2, 'a', :sym]

# BEGIN (write your solution here)
ar1 << 10
# END

assert { ar1.last == 10 }

ar2 = [3, 2, 'a', :sym]
ar3 = [:sym, 2, 'b']

# BEGIN (write your solution here)
ar4 = ar2 & ar3 
# END

assert { ar4 == [2, :sym] }

ar5 = [3, 2, 'a', :sym, 10, 11]

# BEGIN (write your solution here)
ar6 = ar5 [2, 3, 4]
# END

assert { ar6 == ['a', :sym, 10] }

Решение оказалось неожиданным, потому что я задумался над тем что в задании описан интервал, а не перечисление порядковых номеров.

Пришлось вспоминать третий урок и примеры работы с подстроками. В массиве это сработало как и предполагал — указал две точки, между крайними индексами и сработало! Тесты прошли!

Урок пятый: Массивы
Фрагмент решения практического задания из урока про массивы.
Юрий Ронин