arr1 = [] # Пустой массив
arr2 = Array.new # Аналогично []
arr3 = [1, 2, 3] # Массив с элементами
arr4 = %w[one two three] # Массив строк ["one", "two", "three"]
arr5 = Array.new(3) # [nil, nil, nil]
arr6 = Array.new(3, 'x') # ["x", "x", "x"] (осторожно с mutable объектами!)
arr7 = (1..5).to_a # Диапазон в массив [1, 2, 3, 4, 5]
arr = [10, 20, 30, 40, 50]
arr[0] # => 10 (первый элемент)
arr[-1] # => 50 (последний элемент)
arr[1..3] # => [20, 30, 40] (срез)
arr.fetch(2) # => 30 (с проверкой границ)
arr = [1, 2]
arr.push(3) # => [1, 2, 3]
arr << 4 # => [1, 2, 3, 4] (синтаксический сахар для push)
arr.unshift(0) # => [0, 1, 2, 3, 4] (добавление в начало)
arr.insert(2, 1.5) # => [0, 1, 1.5, 2, 3, 4] (вставка по индексу)
arr = [1, 2, 3, 4, 5]
arr.pop # => 5, arr становится [1, 2, 3, 4]
arr.shift # => 1, arr становится [2, 3, 4]
arr.delete(3) # => 3, arr становится [2, 4]
arr.delete_at(1) # => 4, arr становится [2]
[1, 2, 3].each { |x| puts x } # Выводит 1, 2, 3
[1, 2, 3].map { |x| x * 2 } # => [2, 4, 6]
[1, 2, 3].select { |x| x.odd? } # => [1, 3]
[1, 2, 3].reject { |x| x.even? } # => [1, 3]
['a', 'b', 'c'].each_with_index do |item, index|
puts "#{index}: #{item}"
end
# Вывод:
# 0: a
# 1: b
# 2: c
arr = [1, 2, 3, 4, 5]
arr.include?(3) # => true
arr.index(4) # => 3 (индекс элемента)
arr.find { |x| x > 3 } # => 4 (первый соответствующий)
arr.grep(2..4) # => [2, 3, 4] (по диапазону)
[3, 1, 2].sort # => [1, 2, 3]
['b', 'a', 'c'].sort_by(&:upcase) # => ['a', 'b', 'c']
[1, 2, 3].reverse # => [3, 2, 1]
[1, 2, 3].shuffle # => случайный порядок
[1, 2] + [3, 4] # => [1, 2, 3, 4]
[1, 2, 2, 3] - [2] # => [1, 3]
[1, 2] | [2, 3] # => [1, 2, 3] (объединение без дубликатов)
[1, 2] & [2, 3] # => [2] (пересечение)
[1, 2, 3].sum # => 6
[1, 2, 3].inject(:*) # => 6 (1*2*3)
[1, 2, 3].max # => 3
[1, 2, 3].minmax # => [1, 3]
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
matrix[1][2] # => 6
matrix.transpose # => Транспонированная матрица
matrix.flatten # => [1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3].product([4, 5]) # => Декартово произведение
each
для простого перебора без модификацииmap
для преобразования элементовfor
циклов в пользу итераторов&:method
для простых операций: names.map(&:upcase)
Резюмируем: массивы в Ruby - это мощные и гибкие структуры данных с богатым набором методов. Понимание их API позволяет писать лаконичный и выразительный код. Ruby предоставляет множество способов для манипуляции массивами - от базовых операций добавления/удаления элементов до сложных преобразований с использованием блоков и лямбда-выражений.