Menu
Coddy logo textTech

Filter

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

filter recebe um closure de predicado e retorna um novo array contendo apenas os elementos para os quais o closure retornou true.

let nums = [1, 2, 3, 4, 5, 6]
let evens = nums.filter { $0 % 2 == 0 }
print(evens)                 // [2, 4, 6]

O resultado mantém a ordem original. O tipo do resultado corresponde ao tipo de entrada, nenhuma transformação ocorre, apenas uma seleção.

O filter encadeia-se naturalmente com o map:

let big = nums
    .filter { $0 > 2 }
    .map { $0 * $0 }
print(big)                   // [9, 16, 25, 36]

Leia cada cadeia de cima para baixo, assim como um pipeline. Cada etapa produz um novo array; nada modifica o original.

challenge icon

Desafio

Fácil

Leia duas linhas de entrada:

  1. Uma lista de inteiros separados por vírgula
  2. Um inteiro min

Imprima, em linhas separadas:

  1. Os inteiros estritamente maiores que min, unidos com , (ou vazio se nenhum se qualificar)
  2. Os quadrados dos inteiros qualificados, unidos com ,
  3. A contagem de inteiros qualificados

Use filter + map como uma cadeia. Não itere duas vezes sobre a entrada.

Para a entrada 1,5,2,8,3,7 na linha 1 e 4 na linha 2, a saída é:

5,8,7
25,64,49
3

Folha de consulta

Use filter para selecionar elementos que correspondam a uma condição:

let evens = [1,2,3,4].filter { $0 % 2 == 0 } // [2, 4]

Encadeie filter com map como um pipeline:

let result = nums
    .filter { $0 > 2 }
    .map { $0 * $0 }  // [9, 16, 25, 36]

Cada etapa retorna um novo array; o original permanece inalterado. A ordem é preservada.

Experimente você mesmo

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

// TODO: filtrar > min uma vez, depois mapear para os quadrados; imprimir ambos, depois contar
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