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"]Desafío
FácilLee 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):
Lapsed: <...>> current menos renewedNew: <...>> renewed menos currentStayed: <...>> 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,caraHoja de referencia
subtracting devuelve los elementos del primer conjunto no presentes 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 exactamente en uno de los dos conjuntos:
a.symmetricDifference(b) // {1, 2, 5}Usa un conjunto como un filtro O(1) con 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"]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)
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
1Strings a fondo
Conteo e índicesMayúsculas, minúsculas y TrimBúsqueda en StringsDividir y unirReemplazo de subcadenasResumen: Validación de usuario4Conjuntos
Crear conjuntosUnión e intersecciónResta y diferencia simétricaSubconjunto y superconjuntoResumen - Filtro de etiquetas7Proyecto - Seguimiento de hábitos
Descripción general del proyectoMarcar como completado10Proyecto - Motor de cuestionarios
Descripción general del proyectoHacer preguntas2Rangos e Intervalos
Cerrados vs. SemiabiertosSaltos (Stride)Métodos de RangosRangos en SwitchResumen - Cuadrícula de calendario5Funciones de orden superior Pt. 1
MapFilterReduceEncadenar map, filter, reduceResumen - Estadísticas de palabras