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) // 10O 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, *) // 24reduce 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!"Desafio
FácilLeia uma única linha de entrada: uma lista de inteiros separados por vírgula. Usando reduce para cada um, imprima três linhas:
- A soma
- O produto
- 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
8Folha 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 } // 10Abreviação para operadores aritméticos:
[1, 2, 3, 4].reduce(0, +) // 10
[1, 2, 3, 4].reduce(1, *) // 24O 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
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
1Strings a Fundo
Contagem e ÍndicesCase e TrimBusca em StringsDivisão e JunçãoSubstituindo SubstringsRecapitulação - Verificação de Nome de Usuário4Conjuntos
Criando ConjuntosUnião e InterseçãoSubtração e Diferença SimétricaSubconjunto e SuperconjuntoRecapitulação - Filtro de Tags7Projeto - Monitor de Hábitos
Visão Geral do ProjetoMarcar como Concluído10Projeto - Mecanismo de Quiz
Visão Geral do ProjetoFazer Perguntas2Intervalos e Strides
Fechado vs Meio-AbertoStrideMétodos de IntervaloIntervalos no SwitchRecapitulação - Grade de Calendário5Funções de Ordem Superior Parte 1
MapFilterReduceEncadeando map, filter, reduceRecapitulação - Estatísticas de Palavras