Menu
Coddy logo textTech

Encadenar map, filter, reduce

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

El verdadero poder de estos tres métodos es que se pueden componer. Cada paso transforma los datos y se los entrega al siguiente.

let nums = [1, 2, 3, 4, 5, 6]
let result = nums
    .filter { $0 % 2 == 0 }      // [2, 4, 6]
    .map { $0 * $0 }             // [4, 16, 36]
    .reduce(0, +)                // 56
print(result)                    // 56

Lectura de arriba abajo: conserva los números pares, elévalos al cuadrado y suma los cuadrados. Cada paso hace una cosa evidente; la cadena sigue siendo legible incluso cuando crece.

Esta estructura de canalización reemplaza un bucle escrito manualmente por una intención explícita. filter significa «seleccionar». map significa «transformar». reduce significa «combinar».

Un lector puede revisar la cadena y ver qué está sucediendo sin seguir las variables de índice.

Una regla rápida: el orden importa. Filtrar antes de aplicar map requiere menos trabajo que aplicar map antes de filtrar cuando el filtro es selectivo.

challenge icon

Desafío

Intermedio

Lee una sola línea de entrada: una lista separada por comas de pares price:quantity. Por ejemplo, 3:2,5:1,2:4,7:0 representa cuatro pedidos.

Para cada pedido con quantity > 0, el total de la línea es price * quantity. Imprime tres líneas:

  1. Los totales de line (solo para los pedidos con quantity > 0), unidos mediante ,
  2. El total general de esos totales de line
  3. El número de pedidos que contribuyeron (es decir, con una cantidad superior a cero)

Construye la canalización con filter seguido de map; después, obtén count y sum a partir de result.

Para la entrada 3:2,5:1,2:4,7:0, la salida es:

6,5,8
19
3

Pruébalo tú mismo

let orders = readLine()!.components(separatedBy: ",").map { pair -> (Int, Int) in
    let parts = pair.components(separatedBy: ":")
    return (Int(parts[0])!, Int(parts[1])!)
}

// TODO: filtrar quantity > 0, mapear a totales de línea; imprimir unidos, suma, conteo
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