0Pricing
Swift Academy · Aula

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)  // 10

Atalho 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, *))   // 24

Reduzindo 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)  // 9

O 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 abc

Agrupando 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: into

Verificaçã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 acumulador inout — 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

  1. map e compactMap
  2. filter e Predicados
  3. reduce e reduce(into:)
  4. flatMap e Encadeamento
← Voltar para Swift Academy