Зарегистрируйтесь, чтобы продолжить обучение

Способы определения массивов Ruby

В Ruby необычно много способов создания массивов. Они помогают сделать определение короче, и достаточно часто используются на практике. Особенно любит их линтер Rubocop.

# Обычное определение

# Сокращенное
%w[apple orange melon]

%w позволяет задавать массив перечислением без использования дополнительных символов. Даже в примере выше видно, насколько код получается короче и даже читаемее. Единственное ограничение такого способа – наличие пробелов в значениях. Каждый пробел считается разделителем значений:

%w[first second value third]
# ["first", "second", "value", "third"]

Технически, слова можно экранировать, но так обычно не делают из-за резкого ухудшения читаемости:

%w[first second\ value third]
# ["first", "second value", "third"]

Похожим способом создается массив символов, только вместо %w используется %i:

%i[apple orange melon] # [:apple, :orange, :melon]

Так же массивы можно создавать из диапазонов или итераторов:

(1..5).to_a # [1, 2, 3, 4, 5]
1.upto(5).to_a # [1, 2, 3, 4, 5]

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

Array.new(5) { |i| i ** 2 }
# [0, 1, 4, 9, 16]

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff