Elementor Header #8

17. Массивы

1. Введение

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

2. Создание массивов

Массивы можно создавать несколькими способами.

Пример создания массива:

				
					# Пустой массив
empty_array = []

# Массив с элементами
numbers = [1, 2, 3, 4, 5]

# Массив со смешанными типами данных
mixed_array = [1, "hello", 3.14, true]

				
			

3. Доступ к элементам массива

Элементы массива можно получать по индексу. Индексация начинается с нуля.

Примеры доступа к элементам:

				
					numbers = [10, 20, 30, 40, 50]

puts numbers[0]  # => 10
puts numbers[2]  # => 30
puts numbers[-1] # => 50 (отрицательный индекс обращается к элементам с конца)

				
			

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

Элементы массива можно изменять напрямую по индексу.

Пример изменения элемента:

				
					numbers = [1, 2, 3, 4, 5]

numbers[2] = 99
puts numbers  # => [1, 2, 99, 4, 5]

				
			

5. Методы для работы с массивами

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

5.1. Добавление элементов

  • push и << добавляют элементы в конец массива.
  • unshift добавляет элементы в начало массива.

Пример:

				
					numbers = [1, 2, 3]
numbers.push(4)
numbers << 5
numbers.unshift(0)

puts numbers  # => [0, 1, 2, 3, 4, 5]

				
			

5.2. Удаление элементов

  • pop удаляет последний элемент.
  • shift удаляет первый элемент.
  • delete удаляет все элементы, равные заданному значению.
  • reject! удаляет элементы по условию.

Пример:

				
					numbers = [1, 2, 3, 4, 5]

numbers.pop       # => 5
numbers.shift     # => 1
numbers.delete(3) # => 3
numbers.reject! { |num| num.even? }

puts numbers  # => [5]

				
			

5.3. Итерация по элементам

Массивы можно перебирать с помощью методов each, map, select и других.

Пример:

				
					numbers = [1, 2, 3, 4, 5]

# Использование each для вывода элементов
numbers.each { |num| puts num }

# Использование map для создания нового массива
squared_numbers = numbers.map { |num| num ** 2 }
puts squared_numbers  # => [1, 4, 9, 16, 25]

# Использование select для фильтрации элементов
even_numbers = numbers.select { |num| num.even? }
puts even_numbers  # => [2, 4]

				
			

6. Двумерные массивы

В Ruby можно создавать массивы, содержащие другие массивы, что позволяет создавать двумерные массивы.

Пример:

				
					matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
]

puts matrix[0][1]  # => 2
puts matrix[2][2]  # => 9

				
			

7. Распространённые ошибки

7.1. Ошибка: Неправильное обращение к элементам

Попытка доступа к элементу по несуществующему индексу возвращает nil.

Пример ошибки:

				
					numbers = [1, 2, 3]

puts numbers[5]  # => nil (нет элемента с индексом 5)

				
			

7.2. Ошибка: Неправильное изменение элементов

Изменение массива, который ожидается как неизменяемый, может привести к ошибкам.

Пример ошибки:

				
					def print_first_element(arr)
  arr[0] = 99
end

numbers = [1, 2, 3]
print_first_element(numbers)
puts numbers  # => [99, 2, 3] (массив был изменён)

				
			

Заключение

Массивы в Ruby являются мощным инструментом для хранения и управления коллекциями данных. Понимание их методов и особенностей позволяет эффективно работать с данными и создавать гибкие решения. Вы можете использовать массивы для простого хранения данных, их обработки и даже создания сложных структур данных.

8. Тестовое задание

  1. Создайте массив fruits, содержащий имена нескольких фруктов. Добавьте в массив новый фрукт, удалите один из фруктов и выведите на экран все оставшиеся фрукты.

  2. Напишите метод transpose_matrix, который принимает двумерный массив и возвращает его транспонированную версию.

Пример решения:

				
					# Задание 1
fruits = ["apple", "banana", "cherry"]
fruits.push("orange")
fruits.delete("banana")
puts fruits  # => ["apple", "cherry", "orange"]

# Задание 2
def transpose_matrix(matrix)
  matrix.transpose
end

matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
]

transposed = transpose_matrix(matrix)
puts transposed.inspect  # => [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

				
			

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

logo