Menu
Coddy logo textTech

Map

Часть раздела Логика и управление потоком путешествия по Swift на Coddy — урок 23 из 56.

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

let nums = [1, 2, 3, 4]
let doubled = nums.map { $0 * 2 }
print(doubled)               // [2, 4, 6, 8]

$0 — это сокращенная запись для первого параметра замыкания. Полная форма явно указывает имя параметра и тип возвращаемого значения:

let doubled = nums.map { (n: Int) -> Int in
    return n * 2
}

map также может изменять тип элементов. Отображение [Int] через замыкание, которое возвращает String, дает вам [String]:

let labels = nums.map { "#\($0)" }
print(labels)                // ["#1", "#2", "#3", "#4"]
challenge icon

Задание

Легко

Прочитайте одну строку ввода: список целых чисел, разделенных запятыми (температуры в Фаренгейтах).

Преобразуйте каждое значение в градусы Цельсия, используя формулу C = (F - 32) * 5 / 9 в целочисленной арифметике (отбрасывая дробную часть, без десятичных знаков). Выведите на отдельных строках:

  1. Температуры в градусах Цельсия, объединенные через ,
  2. По одной метке для каждой температуры с префиксом F=<f> C=<c>, объединенные через ;

Используйте map для обеих строк.

Для входных данных 32,212,98,0 вывод будет следующим:

0,100,36,-17
F=32 C=0;F=212 C=100;F=98 C=36;F=0 C=-17

Шпаргалка

map применяет замыкание к каждому элементу и возвращает новый массив той же длины:

let nums = [1, 2, 3, 4]
let doubled = nums.map { $0 * 2 }  // [2, 4, 6, 8]

$0 — это сокращенная запись для первого параметра замыкания. Явная форма:

let doubled = nums.map { (n: Int) -> Int in
    return n * 2
}

map может изменять тип элементов (например, [Int][String]):

let labels = nums.map { "#\($0)" }  // ["#1", "#2", "#3", "#4"]

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

let f = readLine()!.components(separatedBy: ",").map { Int($0)! }

// TODO: строка 1 = значения Цельсия, объединенные через ","
// TODO: строка 2 = метки "F=<f> C=<c>", объединенные через ";"
quiz iconПроверьте себя

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

Все уроки раздела Логика и управление потоком