--- status: seed type: concept tags: [] created: 2025-12-17 updated: 2026-05-17 aliases: - Ruby - массивы --- # Ruby - массивы Массив в Ruby - эксземпляр класса **Array** Поскольку массивы являются объектами со своими методами, то это позволяет облегчить работу со списками данных. Массив задается с использованием квадратных скобок, но не только. ```ruby a1 = [...] a2 = %w{word1 word2} a3 = ['start', nil, 5, [...]] a4 = Array.new a5 = Array.new(3) a6 = Array.new(5, "Test") a7 = Array.new(5) { |i| i*i } a8 = Array.[](1, 'a', /^A/) a9 = Array[1, 'a', /^A/] ``` Ruby позволяет создавать многомерные массивы, элементы которого могут иметь разную размерность. ![[Pasted image 20260517200426.png]] ## Индексация массива Доступ к элементам массива в Ruby осуществляется путем указщания его индекса, при этом, есть поддержка отрицательных индексом для индексации с конца. ### Размеры массива ```ruby size == length - синонимы, позволяют узнать количество элементов в массиве ``` ### Поиск элементов массива Метод `array.include?(obj)` возвращает `true`, если объект является элементом массива `array`. Иначе - `false`. Метод `array.index(obj)` возвращает индекс первого вхождения элемента в массив `array`, который равен искомому. Возврат `nil`, если такой элемент не был найден. ### Добавление элементов в массив ```ruby a = [1,2,3] a << 4 a += [5] a.push(6) ``` Метод `array.unshift(obj)` добавляет элемент в начало массива (со сдвигом вправо уже существующих). Метод `array.push(obj)` добавляет элемент в конец массива (синоним - `append`). `array.index(index, obj)` вставляет полученные значения перед элементом с индексом `index`. ### Разворачивание многомерного массива в одномерный ```ruby array.flatten() array.flatten!() # преобразует в одномерный, заменяя первоначальный ``` ### Срезы массивов 1) Использование диапазонов при индексации 2) Использование индекса и длины подмассива 3) `array.values_at(selector)` - возвращает массив, который состоит из элементов массива `array`, которые соответствуют передаеваемым селекторам. Селекторы могут быть целыми числами (индексами) или диапазонами. 4) `array.first(n)` и `array.last(n)`, которые возвращают первые (последние) `n` элементов. ### Операции с массивом 1) `array.sample(n)` выбор случайного элемента (или `n` элементов) 2) `array.select{ |item| block }` выполняет выражение `block` для каждого элемента массива и возвращает массив, состоящий из элементов, для которых выражение принимает значение true ### Удаление из массива 1) `array.delete(obj)` - удаляет все элементы массива, которые равны `obj`. Если ничего не было удалено, то -> `nil` 2) `array.delete_at(index)` удаляет элемент с индексом `index`. 3) `array.delete_if{ |item| block }` удаляет все элементы, полходящие под условие. 4) `array.shift` удаляет первый элемент из массива и возвращает его, если нет такого, то `nil`. 5) `array.pop` удаляет *последний* элемент из массива и возвращает его. ### Полезные методы ![[Pasted image 20260517203130.png]] ![[Pasted image 20260517203153.png]]![[Pasted image 20260517203218.png]] ![[Pasted image 20260517203235.png]] ![[Pasted image 20260517203252.png]] ![[Pasted image 20260517203317.png]] ![[Pasted image 20260517203352.png]]