Menu
Coddy logo textTech

compactMap

Parte de la sección Lógica y Flujo del Journey de Swift de Coddy. Lección 28 de 56.

compactMap es map con los opcionales filtrados. El cierre puede devolver un Optional; compactMap descarta los resultados nil y desenvuelve el resto.

let strings = ["3", "hi", "7", "!", "1"]
let numbers = strings.compactMap { Int($0) }
print(numbers)               // [3, 7, 1]

Int("hi") devuelve nil porque no puede analizar un número de "hi". compactMap los descarta automáticamente y te devuelve un [Int] limpio.

Sin ella, escribirías strings.map { Int($0) } y obtendrías un [Int?] con valores nil mezclados, y después tendrías que filtrarlos tú mismo. compactMap hace ambos pasos de una sola vez.

challenge icon

Desafío

Fácil

Lee una sola línea de entrada: una mezcla separada por comas de enteros y texto basura (algunas entradas no se pueden analizar).

Imprime:

  1. Los enteros (en el orden de entrada), unidos con ,
  2. Cuántas entradas se descartaron (no se pudieron analizar)
  3. La suma de los enteros analizados

Para la entrada 3,hi,7,!,1,42,oops, la salida es:

3,7,1,42
3
53

Pruébalo tú mismo

let parts = readLine()!.components(separatedBy: ",")

// TODO: compactMap a enteros; imprimir unidos, cantidad descartada, suma
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Playground de Swift