Elementor Header #8

18. Методы массивов

1. Введение

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

2. Основные методы для работы с массивами

2.1. each

Метод each используется для перебора элементов массива. Он принимает блок, который выполняется для каждого элемента массива.

Пример:

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

numbers.each do |number|
  puts number
end

				
			

2.2. map

Метод map создает новый массив, содержащий результаты вызова блока для каждого элемента исходного массива.

Пример:

				
					numbers = [1, 2, 3, 4, 5]
squared_numbers = numbers.map { |num| num ** 2 }
puts squared_numbers  # => [1, 4, 9, 16, 25]

				
			

2.3. select

Метод select создает новый массив, содержащий все элементы, для которых блок возвращает true.

Пример:

				
					numbers = [1, 2, 3, 4, 5]
even_numbers = numbers.select { |num| num.even? }
puts even_numbers  # => [2, 4]

				
			

2.4. reject

Метод reject создает новый массив, содержащий все элементы, для которых блок возвращает false.

Пример:

				
					numbers = [1, 2, 3, 4, 5]
odd_numbers = numbers.reject { |num| num.even? }
puts odd_numbers  # => [1, 3, 5]

				
			

2.5. find

Метод find возвращает первый элемент, для которого блок возвращает true. Если нет таких элементов, возвращает nil.

Пример:

				
					numbers = [1, 2, 3, 4, 5]
first_even = numbers.find { |num| num.even? }
puts first_even  # => 2

				
			

2.6. reduce (или inject)

Метод reduce (или inject) применяется для сворачивания массива в одно значение, используя блок.

Пример:

				
					numbers = [1, 2, 3, 4, 5]
sum = numbers.reduce(0) { |total, num| total + num }
puts sum  # => 15

				
			

2.7. sort

Метод sort возвращает новый массив с элементами, отсортированными по возрастанию.

Пример:

				
					numbers = [5, 3, 1, 4, 2]
sorted_numbers = numbers.sort
puts sorted_numbers  # => [1, 2, 3, 4, 5]

				
			

2.8. reverse

Метод reverse возвращает новый массив с элементами в обратном порядке.

Пример:

				
					numbers = [1, 2, 3, 4, 5]
reversed_numbers = numbers.reverse
puts reversed_numbers  # => [5, 4, 3, 2, 1]

				
			

3. Методы для изменения массива

3.1. push и <<

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

Пример:

				
					numbers = [1, 2, 3]
numbers.push(4)
numbers << 5
puts numbers  # => [1, 2, 3, 4, 5]

				
			

3.2. pop

Метод pop удаляет и возвращает последний элемент массива.

Пример:

				
					numbers = [1, 2, 3, 4, 5]
last_number = numbers.pop
puts last_number  # => 5
puts numbers      # => [1, 2, 3, 4]

				
			

3.3. shift

Метод shift удаляет и возвращает первый элемент массива.

Пример:

				
					numbers = [1, 2, 3, 4, 5]
first_number = numbers.shift
puts first_number  # => 1
puts numbers       # => [2, 3, 4, 5]

				
			

3.4. unshift

Метод unshift добавляет элементы в начало массива.

Пример:

				
					numbers = [2, 3, 4, 5]
numbers.unshift(1)
puts numbers  # => [1, 2, 3, 4, 5]

				
			

4. Методы для объединения и разделения массивов

4.1. concat

Метод concat объединяет массив с другим массивом.

Пример:

				
					numbers1 = [1, 2, 3]
numbers2 = [4, 5, 6]
numbers1.concat(numbers2)
puts numbers1  # => [1, 2, 3, 4, 5, 6]

				
			

4.2. flatten

Метод flatten возвращает новый массив, где все вложенные массивы преобразованы в одномерный массив.

Пример:

				
					nested_array = [1, [2, 3], [4, [5, 6]]]
flat_array = nested_array.flatten
puts flat_array  # => [1, 2, 3, 4, 5, 6]

				
			

4.3. split

Метод split используется для разделения строки на массив подстрок по заданному разделителю. (Обратите внимание, что split работает со строками, но может быть полезен при работе с массивами строк.)

Пример:

				
					sentence = "Hello world from Ruby"
words = sentence.split
puts words.inspect  # => ["Hello", "world", "from", "Ruby"]

				
			

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

5.1. Ошибка: Неправильное использование методов изменения массива

Некоторые методы изменения массива, такие как push и concat, изменяют оригинальный массив, а не создают новый.

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

				
					numbers = [1, 2, 3]
numbers_push_result = numbers.push(4)
puts numbers_push_result  # => [1, 2, 3, 4] (это же значение измененного массива)

				
			

5.2. Ошибка: Неправильное использование методов для работы с массивами

Использование методов для работы с массивами, таких как map и select, может привести к неожиданным результатам, если не правильно переданы блоки.

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

				
					numbers = [1, 2, 3, 4, 5]
# Пропуск блока в методе map может привести к пустому массиву
squared_numbers = numbers.map
puts squared_numbers.inspect  # => [nil, nil, nil, nil, nil]

				
			

Заключение

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

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

  1. Напишите метод filter_and_square, который принимает массив чисел, фильтрует только четные числа и возвращает новый массив, содержащий квадраты этих чисел.

  2. Напишите метод merge_and_sort, который принимает два массива и возвращает новый массив, состоящий из элементов обоих массивов, отсортированный по возрастанию.

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

				
					# Задание 1
def filter_and_square(numbers)
  numbers.select { |num| num.even? }.map { |num| num ** 2 }
end

puts filter_and_square([1, 2, 3, 4, 5])  # => [4, 16]

# Задание 2
def merge_and_sort(array1, array2)
  (array1 + array2).sort
end

puts merge_and_sort([3, 1, 4], [2, 5, 6])  # => [1, 2, 3, 4, 5, 6]

				
			

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

logo