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 — это сокращённая запись для первого параметра замыкания. В полной форме указываются имя параметра и тип return:

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

map также может изменять тип элементов. Применение 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

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

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

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

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

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

Потренируйтесь самостоятельно: Песочница Swift