Subtração e Diferença Simétrica
Parte da seção Lógica e Fluxo do Journey de Swift da Coddy — lição 20 de 56.
Mais duas operações de conjunto completam o kit de ferramentas.
subtracting retorna os elementos do primeiro conjunto que não estão no segundo:
let a: Set = [1, 2, 3, 4]
let b: Set = [3, 4, 5]
a.subtracting(b) // {1, 2}symmetricDifference retorna os elementos que estão em exatamente um dos dois conjuntos, nunca em ambos:
a.symmetricDifference(b) // {1, 2, 5}Juntamente com union e intersection, esses quatro cobrem todas as questões de álgebra de conjuntos que você encontrará no dia a dia.
A pertinência a um conjunto também é útil como um filtro: pergunte se um valor reside em um conjunto em O(1):
let stopwords: Set = ["the", "a", "an"]
let words = ["the", "cat", "sat", "on", "a", "mat"]
let real = words.filter { !stopwords.contains($0) }
// ["cat", "sat", "on", "mat"]Desafio
FácilLeia duas linhas de entrada, cada uma sendo uma lista de strings separadas por vírgula. Trate-as como currentMembers e renewedMembers respectivamente.
Imprima três linhas, cada uma ordenada alfabeticamente e unida com , (ou vazia quando não houver nenhuma):
Lapsed: <...>> current menos renewedNew: <...>> renewed menos currentStayed: <...>> interseção das duas
Para a entrada alice,bob,cara na linha 1 e bob,cara,dan na linha 2, a saída é:
Lapsed: alice
New: dan
Stayed: bob,caraFolha de consulta
subtracting retorna elementos no primeiro conjunto que não estão no segundo:
let a: Set = [1, 2, 3, 4]
let b: Set = [3, 4, 5]
a.subtracting(b) // {1, 2}symmetricDifference retorna elementos que estão em exatamente um dos dois conjuntos:
a.symmetricDifference(b) // {1, 2, 5}Use um conjunto como um filtro O(1) com contains:
let stopwords: Set = ["the", "a", "an"]
let words = ["the", "cat", "sat", "on", "a", "mat"]
let real = words.filter { !stopwords.contains($0) }
// ["cat", "sat", "on", "mat"]Experimente você mesmo
let current = Set(readLine()!.components(separatedBy: ","))
let renewed = Set(readLine()!.components(separatedBy: ","))
// TODO: imprimir Lapsed (current - renewed), New (renewed - current), Stayed (intersection)
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