Menu
Coddy logo textTech

Reduce

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

reduce reduz um array inteiro a um único valor. É assim que você soma, multiplica, encontra um extremo ou constrói uma nova string ou array a partir de muitos elementos.

let total = [1, 2, 3, 4].reduce(0) { acc, n in acc + n }
print(total)                       // 10

O primeiro argumento é o acumulador inicial. A closure recebe o acumulador atual e o próximo elemento, e retorna o novo acumulador. O valor final do acumulador é o resultado.

Para operadores aritméticos, o Swift oferece um atalho baseado em símbolos:

[1, 2, 3, 4].reduce(0, +)              // 10
[1, 2, 3, 4].reduce(1, *)              // 24

reduce não precisa retornar um número. O acumulador pode ser de qualquer tipo, você decide:

let sentence = ["hi", "there"].reduce("") { $0 + $1 + "!" }
print(sentence)                    // "hi!there!"
challenge icon

Desafio

Fácil

Leia uma única linha de entrada: uma lista de inteiros separados por vírgula. Usando reduce para cada um, imprima três linhas:

  1. A soma
  2. O produto
  3. O valor máximo (use uma closure que retorne o maior dos dois argumentos, não chame .max())

Assuma pelo menos um elemento. Para o máximo, você pode usar nums[0] como o acumulador inicial e aplicar o reduce no restante do array.

Para a entrada 3,7,2,8,4, a saída é:

24
1344
8

Folha de consulta

reduce reduz um array a um único valor usando um acumulador inicial e um closure:

let total = [1, 2, 3, 4].reduce(0) { acc, n in acc + n } // 10

Abreviação para operadores aritméticos:

[1, 2, 3, 4].reduce(0, +)  // 10
[1, 2, 3, 4].reduce(1, *)  // 24

O acumulador pode ser de qualquer tipo:

["hi", "there"].reduce("") { $0 + $1 + "!" } // "hi!there!"

Para encontrar um valor máximo usando reduce, use o primeiro elemento como o valor inicial:

let maxVal = nums.dropFirst().reduce(nums[0]) { $0 > $1 ? $0 : $1 }

Experimente você mesmo

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

// TODO: soma, produto, máximo via reduce
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