Métodos de Intervalo
Parte da seção Lógica e Fluxo do Journey de Swift da Coddy — lição 9 de 56.
Intervalos são Collections reais, então eles vêm com a mesma caixa de ferramentas que você usa em arrays.
contains, count, first e last todos funcionam diretamente:
let r = 1...10
print(r.contains(5)) // true
print(r.count) // 10
print(r.first!, r.last!) // 1 10A maioria dos métodos de array que você já usou também funciona. filter retorna um array porque o resultado da filtragem de um intervalo não é, por si só, um intervalo:
let evens = (1...10).filter { $0 % 2 == 0 }
print(evens) // [2, 4, 6, 8, 10]O mesmo vale para o reduce: ranges o possuem, e você contará com ele para somas e produtos rápidos.
Desafio
FácilLeia dois números inteiros (duas linhas): n e target. Trate o intervalo fechado 1...n como seu conjunto de dados.
Imprima três linhas:
truequandotargetestiver no intervalo, caso contráriofalse- O produto de cada valor no intervalo (
n!: fatorial). Usereduce. - Os valores no intervalo que são múltiplos de
3, unidos com,(ou uma linha vazia quando nenhum se qualificar). Usefilter.
Para a entrada 5 / 3, a saída é:
true
120
3Folha de consulta
Ranges estão em conformidade com Collection e suportam métodos comuns de coleção:
let r = 1...10
r.contains(5) // true
r.count // 10
r.first! // 1
r.last! // 10filter em um range retorna um array:
let evens = (1...10).filter { $0 % 2 == 0 }
// [2, 4, 6, 8, 10]reduce funciona diretamente em ranges:
let product = (1...5).reduce(1) { $0 * $1 } // 120
let sum = (1...5).reduce(0, +) // 15Experimente você mesmo
let n = Int(readLine()!)!
let target = Int(readLine()!)!
let r = 1...n
// TODO: contains(target), produto via reduce, múltiplos de 3 via filter
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