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.
Desafio
FácilLeia duas linhas de entrada:
- Uma lista de inteiros separados por vírgula
- Um inteiro
min
Imprima, em linhas separadas:
- Os inteiros estritamente maiores que
min, unidos com,(ou vazio se nenhum se qualificar) - Os quadrados dos inteiros qualificados, unidos com
, - 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
3Folha 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
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