--- status: seed type: knowledge tags: - programming - ruby created: 2026-05-17 updated: 2026-05-17 title: Ruby - массивы source: "[[Ruby - массивы]]" --- # Ruby — массивы Массив в Ruby — экземпляр класса `Array`. Поскольку массивы являются объектами со своими методами, работа со списками данных упрощается. Связанные темы: [[Ruby - основы языка]] ## Создание массива ```ruby a1 = [1, 2, 3] # литерал a2 = %w{word1 word2} # массив строк без кавычек a3 = ['start', nil, 5, [1, 2]] # разнотипные элементы, вложенный массив a4 = Array.new # пустой массив a5 = Array.new(3) # [nil, nil, nil] a6 = Array.new(5, "Test") # ["Test", "Test", ...] a7 = Array.new(5) { |i| i * i } # [0, 1, 4, 9, 16] a8 = Array.[](1, 'a', /^A/) # через метод класса ``` Ruby поддерживает многомерные массивы с элементами разной размерности. ## Индексация ```ruby a[0] # первый элемент a[-1] # последний элемент a[-2] # предпоследний ``` ### Размер ```ruby a.size # количество элементов a.length # синоним size ``` ## Поиск элементов ```ruby a.include?(obj) # => true / false a.index(obj) # индекс первого вхождения или nil ``` ## Добавление элементов ```ruby a << 4 # в конец a += [5] # объединение a.push(6) # в конец (синоним: append) a.unshift(0) # в начало (сдвигает остальные вправо) a.insert(2, x) # вставить перед элементом с индексом 2 ``` ## Удаление элементов ```ruby a.delete(obj) # удалить все вхождения obj a.delete_at(index) # удалить по индексу a.delete_if { |x| block } # удалить все, подходящие под условие a.shift # удалить и вернуть первый элемент a.pop # удалить и вернуть последний элемент ``` ## Срезы ```ruby a[1..3] # диапазон индексов a[1, 3] # начиная с индекса 1, длиной 3 a.values_at(0, 2, 4) # элементы по перечисленным индексам или диапазонам a.first(n) # первые n элементов a.last(n) # последние n элементов ``` ## Полезные методы ```ruby a.flatten # развернуть многомерный массив в одномерный a.flatten! # то же, но изменяет сам массив a.sample # случайный элемент a.sample(n) # n случайных элементов a.select { |x| block } # массив элементов, для которых block == true ```