Menu
Coddy logo textTech

Encadeando map, filter, reduce

Parte da seção Lógica e Fluxo do Journey de Swift da Coddy. Lição 26 de 56.

O verdadeiro poder desses três métodos é que eles podem ser compostos. Cada etapa transforma os dados e os passa para a próxima.

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

Lendo de cima para baixo: mantenha os números pares, eleve-os ao quadrado e some os quadrados. Cada etapa é uma coisa óbvia, e a cadeia continua legível mesmo à medida que cresce.

Este formato de pipeline substitui um loop escrito manualmente por uma intenção explícita. filter significa "selecionar". map significa "transformar". reduce significa "agrupar".

Um leitor pode examinar a cadeia e ver o que está acontecendo sem rastrear variáveis de índice.

Uma regra rápida: a ordem importa. Filtrar antes de mapear dá menos trabalho do que mapear antes de filtrar quando o filtro é seletivo.

challenge icon

Desafio

Médio

Leia uma única linha de entrada: uma lista separada por vírgulas de pares price:quantity. Por exemplo, 3:2,5:1,2:4,7:0 significa quatro pedidos.

Para cada pedido com quantity > 0, o total do item é price * quantity. Imprima três linhas:

  1. Os totais dos itens (somente para pedidos com quantity > 0), unidos por ,
  2. O total geral desses totais de itens
  3. O número de pedidos que contribuíram (ou seja, com quantidade acima de zero)

Construa o pipeline com filter seguido de map e, em seguida, obtenha a contagem e a soma a partir do resultado.

Para a entrada 3:2,5:1,2:4,7:0, a saída é:

6,5,8
19
3

Experimente você mesmo

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 para totais de linha; imprimir joined, sum, count
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

Pratique por conta própria: Playground de Swift