reduce e reduce(into:)
Agregue coleções em um único valor.
reduce e reduce(into:) é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Swift Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Swift Academy inclui 4 aulas no total.
O que é reduce?
reduce reduz uma sequência inteira a um único valor, combinando repetidamente um acumulador com cada elemento.
- Você fornece um valor inicial
- E um fechamento
(accumulator, element) -> accumulator
Somando com reduce
O exemplo clássico — some tudo:
let nums = [1, 2, 3, 4]
let total = nums.reduce(0) { acc, x in acc + x }
print(total) // 10Atalho para operadores
Quando o fechamento é apenas um operador, você pode passar diretamente a função do operador:
let nums = [1, 2, 3, 4]
print(nums.reduce(0, +)) // 10
print(nums.reduce(1, *)) // 24Reduzindo para um tipo diferente
O tipo do resultado pode ser diferente do tipo dos elementos:
let words = ["a", "b", "c"]
let joined = words.reduce("") { $0 + $1.uppercased() }
print(joined) // "ABC"Encontrando o máximo com reduce
Você pode calcular agregações além de somas:
let nums = [3, 9, 2, 7]
let maxVal = nums.reduce(Int.min) { max($0, $1) }
print(maxVal) // 9O custo de reduce
O reduce simples cria um acumulador completamente novo a cada etapa. Para tipos de valor como String ou Array, isso significa copiar todo o acumulador a cada elemento — trabalho O(n²) para entradas grandes.
Apresentando reduce(into:)
reduce(into:) passa o acumulador como um parâmetro inout, para que você o altere no próprio lugar em vez de copiá-lo:
let nums = [1, 2, 2, 3, 3, 3]
let counts = nums.reduce(into: [Int: Int]()) { dict, n in
dict[n, default: 0] += 1
}
print(counts) // [1: 1, 2: 2, 3: 3]Criando um vetor com eficiência
reduce(into:) é especialmente útil ao acumular elementos em uma coleção:
let nums = [1, 2, 3, 4, 5]
let evensSquared = nums.reduce(into: [Int]()) { result, n in
if n % 2 == 0 { result.append(n * n) }
}
print(evensSquared) // [4, 16]reduce e reduce(into:)
Mesmo resultado, características de desempenho diferentes:
let parts = ["a", "b", "c"]
let a = parts.reduce("") { $0 + $1 } // copies each step
let b = parts.reduce(into: "") { $0 += $1 } // mutates in place
print(a, b) // abc abcAgrupando com reduce(into:)
Um padrão frequente: agrupar itens por uma chave:
let names = ["Ann", "Al", "Bo", "Cy"]
let byInitial = names.reduce(into: [Character: [String]]()) { dict, name in
dict[name.first!, default: []].append(name)
}
print(byInitial[Character("A")]!) // ["Ann", "Al"]Escolhendo entre eles
Use reduce para acumuladores escalares cheap (Int, Double). Use reduce(into:) sempre que o acumulador for uma coleção ou outro tipo de valor grande, para evitar cópias.
let nums = [1, 2, 3]
print(nums.reduce(0, +)) // scalar: plain reduce
print(nums.reduce(into: Set<Int>()) { $0.insert($1) }) // collection: intoVerificação rápida
Por que preferir reduce(into:) ao criar um dicionário ou vetor?
Recapitulação
Você aprendeu a redução:
reduce(initial) { acc, x in ... }reduz uma sequência a um único valor- Atalho para operadores:
reduce(0, +) reduce(into:)altera um acumuladorinout— use-o para coleções- É excelente para contagens, agrupamentos e junções
A seguir: flatMap e encadeamento.
Perguntas Frequentes
A aula “reduce e reduce(into:)” é grátis?
Sim — o texto completo de “reduce e reduce(into:)” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Swift Academy, atualize para CoddyKit PRO. O curso de Swift Academy inclui 4 aulas no total.
O que vou aprender em “reduce e reduce(into:)”?
Agregue coleções em um único valor. Você pratica Swift Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Swift Academy?
Nenhuma experiência prévia é necessária. Swift Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “reduce e reduce(into:)”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Swift Academy?
Sim. Cada aula de Swift Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- map e compactMap
- filter e Predicados
- reduce e reduce(into:)
- flatMap e Encadeamento