Subconjunto y superconjunto
Parte de la sección Lógica y Flujo del Journey de Swift de Coddy — lección 21 de 56.
Más allá de combinar conjuntos, también puedes compararlos.
isSubset(of:) responde "¿están todos y cada uno de mis elementos también en el otro conjunto?"
let small: Set = [1, 2]
let big: Set = [1, 2, 3, 4]
small.isSubset(of: big) // true
big.isSubset(of: small) // falseisSuperset(of:) es lo inverso, "¿contengo todos los elementos del otro conjunto?":
big.isSuperset(of: small) // trueisDisjoint(with:) devuelve true cuando los dos conjuntos no comparten ningún elemento en absoluto:
let evens: Set = [2, 4, 6]
let odds: Set = [1, 3, 5]
evens.isDisjoint(with: odds) // trueEstos tres predicados son la forma más limpia de expresar "permisos requeridos" o reglas "all-of" / "none-of" sin escribir un bucle manual.
Desafío
IntermedioEstás verificando el acceso a un documento. Lee tres líneas:
- Los permisos del usuario (separados por comas)
- Los permisos requeridos (separados por comas)
- Los permisos prohibidos (separados por comas)
Al usuario se le concede el acceso cuando:
- Sus permisos son un superset de los requeridos (posee cada permiso requerido)
- Sus permisos son disjoint de los prohibidos
Imprime exactamente uno de los siguientes:
grantedmissing: <...>cuando faltan permisos requeridos (ordenados, separados por comas). Imprime esto incluso si también se poseen permisos prohibidos.forbidden: <...>cuando no faltan permisos requeridos pero se poseen permisos prohibidos (ordenados, separados por comas)
Para la entrada read,write,admin / read,write / delete, la salida es granted.
Para la entrada read / read,write / delete, la salida es missing: write.
Hoja de referencia
Métodos de comparación de conjuntos en Swift:
let small: Set = [1, 2]
let big: Set = [1, 2, 3, 4]
small.isSubset(of: big) // true – cada elemento de small está en big
big.isSuperset(of: small) // true – big contiene cada elemento de small
let evens: Set = [2, 4, 6]
let odds: Set = [1, 3, 5]
evens.isDisjoint(with: odds) // true – no hay elementos compartidosPruébalo tú mismo
let user = Set(readLine()!.components(separatedBy: ","))
let required = Set(readLine()!.components(separatedBy: ","))
let forbidden = Set(readLine()!.components(separatedBy: ","))
// TODO: concedido | faltante: ... | prohibido: ...
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