Menu
Coddy logo textTech

Resta y diferencia simétrica

Parte de la sección Lógica y Flujo del Journey de Swift de Coddy. Lección 20 de 56.

Dos operaciones de conjuntos más completan el kit de herramientas.

subtracting devuelve los elementos del primer conjunto que no están en el segundo:

let a: Set = [1, 2, 3, 4]
let b: Set = [3, 4, 5]
a.subtracting(b)             // {1, 2}

symmetricDifference devuelve los elementos que están en exactamente uno de los dos conjuntos, nunca en ambos:

a.symmetricDifference(b)     // {1, 2, 5}

Junto con union e intersection, estos cuatro cubren todas las preguntas de álgebra de conjuntos que encontrarás en el día a día.

La pertenencia a un conjunto también es útil como un filtro: pregunta si un valor reside en un conjunto en 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

Desafío

Fácil

Lee dos líneas de entrada, cada una con una lista de cadenas separadas por comas. Trátalas como currentMembers y renewedMembers respectivamente.

Imprime tres líneas, cada una ordenada alfabéticamente y unida con , (o vacía cuando no haya ninguna):

  1. Lapsed: <...> > current menos renewed
  2. New: <...> > renewed menos current
  3. Stayed: <...> > intersección de las dos

Para la entrada alice,bob,cara en la línea 1 y bob,cara,dan en la línea 2, la salida es:

Lapsed: alice
New: dan
Stayed: bob,cara

Pruébalo tú mismo

let current = Set(readLine()!.components(separatedBy: ","))
let renewed = Set(readLine()!.components(separatedBy: ","))

// TODO: imprimir Lapsed (current - renewed), New (renewed - current), Stayed (intersection)
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Playground de Swift