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, потому что оно короче.
Задание
ЛегкоПрочитайте одну строку входных данных, содержащую целые числа, разделенные запятыми (например, 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, Bobmap и collect — это идентичные методы. Большинство Ruby-разработчиков предпочитают map.
Попробуйте сами
# Прочитать входные данные, разделенные запятыми
input = gets.chomp
# TODO: Напишите свой код ниже
# 1. Разделите входную строку на массив целых чисел
# 2. Используйте метод map, чтобы возвести каждое число в квадрат
# 3. Выведите каждое число, возведенное в квадрат, на отдельной строкеВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Операторы. Часть 2
Логические операторы. Часть 1Логические операторы. Часть 2Повторение — простая логикаЛогические операторы. Часть 3Логические операторы. Часть 47Калькулятор разделения счета
Приветственное сообщениеПолучение пользовательского ввода13Продвинутая работа с массивами
Срезы массивов через диапазоныСрезы массивов через индексыОператоры массивовМетод include?2Переменные и типы данных
Числа и переменныеСтроковый тип данныхЛогический тип данныхТип данных SymbolПроверка типов данныхПравила именованияПовторение: создание переменных5Принятие решений
Оператор IfКонструкция If - ElseПовторение — Простой калькуляторВложенные конструкции If - ElseОператор Unless8Циклы
Цикл For с диапазонамиЦикл WhileОператор BreakОператор NextПовторение: ФакториалЦикл TimesЦикл UntilВложенные циклыПовторение: Динамический ввод3Операторы. Часть 1
Арифметические операторыОператор остатка от деленияСокращенная арифметикаИтоги: простая математикаОператоры сравнения6Основы ввода-вывода
Вывод с помощью putsВывод с помощью print и pВывод с переменнымиВвод с помощью getsМетод chompПреобразование типовИтоги — Калькулятор возрастаИтоги — Истина или ложь