Menu
Coddy logo textTech

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"]
challenge icon

Desafio

Fácil

Leia 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):

  1. Lapsed: <...> > current menos renewed
  2. New: <...> > renewed menos current
  3. Stayed: <...> > 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,cara

Folha 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)
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