Menu
Coddy logo textTech

Map

Parte da seção Lógica e Fluxo do Journey de Swift da Coddy — lição 23 de 56.

map recebe um closure e o aplica a cada elemento, retornando um novo array com os resultados. O novo array tem o mesmo comprimento que o original.

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

$0 é um atalho para o primeiro parâmetro da closure. A forma mais longa especifica o nome do parâmetro e o tipo de retorno:

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

map também pode alterar o tipo do elemento. Mapear um [Int] através de uma closure que retorna String resulta em um [String]:

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

Desafio

Fácil

Leia uma única linha de entrada: uma lista de números inteiros separados por vírgula (temperaturas em Fahrenheit).

Converta cada uma para Celsius usando a fórmula C = (F - 32) * 5 / 9 em aritmética de inteiros (truncar em direção a zero, sem decimais). Imprima, em linhas separadas:

  1. As temperaturas em Celsius, unidas com ,
  2. Um rótulo por temperatura com o prefixo F=<f> C=<c>, unidos com ;

Use map para ambas as linhas.

Para a entrada 32,212,98,0, a saída é:

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

Folha de consulta

map aplica um closure a cada elemento e retorna um novo array com o mesmo comprimento:

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

$0 é um atalho para o primeiro parâmetro do closure. Forma explícita:

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

map pode alterar o tipo do elemento (ex: [Int][String]):

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

Experimente você mesmo

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

// TODO: linha 1 = celsius unidos com ","
// TODO: linha 2 = rótulos "F=<f> C=<c>" unidos com ";"
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e Fluxo