Menu
Coddy logo textTech

Map и Collect

Часть раздела Основы путешествия по Ruby на Coddy — урок 68 из 88.

В то время как each отлично подходит для выполнения действий над элементами, иногда вам нужно преобразовать массив в новый. Метод map (также называемый collect) делает именно это: он создает новый массив, содержащий результаты выполнения вашего блока для каждого элемента.

numbers = [1, 2, 3, 4]
doubled = numbers.map { |n| n * 2 }

puts doubled  # Вывод: 2, 4, 6, 8

Ключевое отличие от each заключается в том, что map возвращает новый массив с преобразованными значениями. Исходный массив остается неизменным.

Вот практический пример, который преобразует температуру из Цельсия в Фаренгейт:

celsius = [0, 20, 100]
fahrenheit = celsius.map { |c| c * 9 / 5 + 32 }

puts fahrenheit  # Вывод: 32, 68, 212

Вы также можете использовать map со строками:

names = ["alice", "bob"]
capitalized = names.map { |name| name.capitalize }

puts capitalized  # Вывод: Alice, Bob

Методы map и collect идентичны. Ruby предоставляет оба имени, поэтому вы можете использовать то, которое лучше читается в вашем коде. Большинство Ruby-разработчиков предпочитают map, потому что оно короче.

challenge icon

Задание

Легко

Прочитайте одну строку входных данных, содержащую целые числа, разделенные запятыми (например, 2,4,6,8,10).

Разделите входную строку на массив целых чисел, затем используйте метод map, чтобы создать новый массив, в котором каждое число возведено в квадрат (умножено само на себя).

Выведите каждый элемент нового массива квадратов на отдельной строке.

Например, если на вход подается 2,4,6,8,10, результат должен быть следующим:

4
16
36
64
100

Если на вход подается 1,2,3,4,5, результат должен быть следующим:

1
4
9
16
25

Если на вход подается 3,7,11, результат должен быть следующим:

9
49
121

Если на вход подается 10, результат должен быть следующим:

100

Шпаргалка

Метод map (также называемый collect) преобразует массив в новый, применяя блок к каждому элементу. Он возвращает новый массив с преобразованными значениями, оставляя исходный массив без изменений.

numbers = [1, 2, 3, 4]
doubled = numbers.map { |n| n * 2 }
puts doubled  # Вывод: 2, 4, 6, 8

Пример с конвертацией температуры:

celsius = [0, 20, 100]
fahrenheit = celsius.map { |c| c * 9 / 5 + 32 }
puts fahrenheit  # Вывод: 32, 68, 212

Пример со строками:

names = ["alice", "bob"]
capitalized = names.map { |name| name.capitalize }
puts capitalized  # Вывод: Alice, Bob

map и collect — это идентичные методы. Большинство Ruby-разработчиков предпочитают map.

Попробуйте сами

# Прочитать входные данные, разделенные запятыми
input = gets.chomp

# TODO: Напишите свой код ниже
# 1. Разделите входную строку на массив целых чисел
# 2. Используйте метод map, чтобы возвести каждое число в квадрат
# 3. Выведите каждое число, возведенное в квадрат, на отдельной строке
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы