Angel Rosales Reyes
Un ejemplo perfecto para el uso de sets es el almacenamiento de una lista de ID's de cualquier cosa, ya que no deben repetirse
Los sets en Swift son colecciones que guardan elementos sin orden y sin duplicados, ideales cuando necesitas listas únicas en tu app. Aquí entenderás cómo declararlos, manipularlos y en qué se diferencian de los arrays, con ejemplos prácticos en Xcode pensados para quienes están aprendiendo Swift desde cero.
Qué es un set en Swift y en qué se diferencia de un array
Un set es una lista a la que puedes agregar y quitar elementos, parecida a un arreglo. La diferencia está en dos reglas que cambian todo cómo lo usas.
En la clase anterior viste que un array sí permite repetir manzanas. En un set, esa segunda manzana simplemente no entra. Y aquí viene lo interesante: el orden en que aparecen los elementos al imprimir el conjunto puede cambiar, porque Swift los acomoda como mejor le parece.
¿Para qué sirve un set en Swift? Sirve para guardar colecciones de valores únicos donde el orden no importa, como una lista de estudiantes inscritos en una materia donde nadie puede repetirse.
Cómo se declara un set vacío en Swift
A diferencia de un array, cuando creas un set vacío necesitas decirle explícitamente qué tipo de dato va a contener. Si no, el compilador no sabe qué esperar.
La primera forma usa anotación de tipo antes del igual [01:30]:
swift var animales: Set<String> = Set()
La segunda forma es equivalente, solo cambia la sintaxis:
swift var otrosAnimales = Set<String>()
Ambas declaran un conjunto vacío de strings. La clave está en los signos <> que envuelven el tipo, así Swift sabe qué clase de elementos vas a guardar.
Cómo inicializo un set con datos
También puedes arrancar tu set con valores ya adentro, igual que harías con un array:
swift var animales: Set<String> = ["perro", "gato", "conejo"] print(animales)
Al correr el programa verás algo muy parecido a una lista, pero recuerda: por dentro es un conjunto y se comporta distinto.
Cómo se manipulan los elementos de un set
Swift te da métodos sencillos para contar, agregar y eliminar elementos. Aquí está lo esencial.
Cómo cuento cuántos elementos tiene un set
Usa la propiedad .count para saber el total de elementos [02:50]:
swift let contarAnimales = animales.count let contarOtrosAnimales = otrosAnimales.count
En el ejemplo, animales devuelve 3 y otrosAnimales devuelve 0 porque está vacío.
Cómo agrego elementos con insert
Para sumar un elemento usas .insert():
swift animales.insert("caballo") print(animales)
Swift lo coloca en la posición que él decide, sin un criterio que tú puedas predecir. Si intentas insertar "caballo" otra vez, no pasa nada: el set ignora el duplicado y mantiene los mismos cuatro elementos.
Ahora prueba algo curioso. Inserta "caballo" con c minúscula:
swift animales.insert("caballo")
Esta vez sí lo agrega. ¿Por qué? Porque en programación las mayúsculas y minúsculas son caracteres distintos, así que "Caballo" y "caballo" son strings diferentes para Swift.
¿Un set en Swift distingue mayúsculas de minúsculas? Sí. Cada string se compara carácter por carácter, así que
"Perro"y"perro"se consideran elementos distintos y ambos pueden coexistir en el set.
Cómo elimino elementos de un set
Tienes dos formas. La primera quita un elemento específico con .remove() [05:10]:
swift animales.remove("caballo")
La segunda vacía todo el conjunto con .removeAll():
swift animales.removeAll()
No puedes eliminar por posición, porque los sets no tienen posiciones. Si le pides al set borrar el elemento número 2, simplemente no sabe a cuál te refieres.
Cuándo conviene usar un set en lugar de un array
Imagina que estás construyendo una app que lista estudiantes inscritos en una materia. No tiene sentido que el mismo estudiante aparezca dos veces, así que un set te garantiza esa unicidad sin que tengas que validarla manualmente.
En cambio, si necesitas mantener el orden en que se hicieron las inscripciones o permitir registros duplicados con marcas de tiempo, un array encaja mejor. La regla rápida: usa set cuando el orden no importa y los duplicados no deben existir.
¿Qué otro caso real se te ocurre donde usarías un set, y en cuál preferirías un array? Déjamelo en los comentarios.
Angel Rosales Reyes
Un ejemplo perfecto para el uso de sets es el almacenamiento de una lista de ID's de cualquier cosa, ya que no deben repetirse
Christian Daniel Arzaluz Tellez
Mi ejemplo para el uso de Sets:
Un sistema de gestión de pacientes, ya que cada paciente es único e irrepetible.
Andres Neira
Un ejemplo de Sets puede ser los usuarios de una red social ya que no se pueden repetir, cada uno es unico
Gersain Barron Velazquez
Ahi va mis notas
print("--- Sets ---\n") // Declaración de sets vacíos var animales: Set<String> = Set([]) var otrosAnimales: Set<String> = [] // Declaración de un set con elementos iniciales var animales2: Set<String> = ["Perro", "Gato", "Gallina"] print("Set inicial: \(animales2)") // Verificar si un set está vacío if animales2.isEmpty { print("El set de animales está vacío.") } else { print("El set de animales tiene elementos.") } // Contar elementos en un set print("Número de animales: \(animales2.count)") /** Función para agregar un elemento al set. - Parameter animal: El nombre del animal a agregar. */ func agregarAnimal(animal: String) { let agregado = animales2.insert(animal) if agregado.inserted { print("Se agregó: \(animal)") } else { print("El animal \(animal) ya está en el set.") } } agregarAnimal(animal: "Loro") agregarAnimal(animal: "Gato") // Intento de agregar un duplicado print("Set actualizado: \(animales2)") /** Función para eliminar un elemento del set. - Parameter animal: El nombre del animal a eliminar. */ func eliminarAnimal(animal: String) { if let eliminado = animales2.remove(animal) { print("Se eliminó: \(eliminado)") } else { print("El animal \(animal) no está en el set.") } } eliminarAnimal(animal: "Perro") eliminarAnimal(animal: "Conejo") // Intento de eliminar un elemento que no está print("Set actualizado: \(animales2)") /** Función para verificar si un set contiene un elemento específico. - Parameter animal: El nombre del animal a buscar. */ func verificarAnimal(animal: String) { let mensaje = animales2.contains(animal) ? "El set contiene \(animal)." : "El set no contiene \(animal)." print(mensaje) } verificarAnimal(animal: "Gallina") verificarAnimal(animal: "Perro") // Operaciones con sets var setA: Set<String> = ["Gato", "Perro", "Loro"] var setB: Set<String> = ["Gallina", "Gato", "Caballo"] // Unión de dos sets let union = setA.union(setB) print("Unión de setA y setB: \(union)") // Intersección de dos sets let interseccion = setA.intersection(setB) print("Intersección de setA y setB: \(interseccion)") // Diferencia entre dos sets let diferencia = setA.subtracting(setB) print("Diferencia de setA menos setB: \(diferencia)") // Diferencia simétrica entre dos sets let diferenciaSimetrica = setA.symmetricDifference(setB) print("Diferencia simétrica de setA y setB: \(diferenciaSimetrica)") // Subconjunto y superconjunto print("setB es subconjunto de union: \(setB.isSubset(of: union))") print("setA es superconjunto de interseccion: \(setA.isSuperset(of: interseccion))") // Comparar igualdad entre sets let setIgualdad = setA == setB print("¿setA y setB son iguales? \(setIgualdad)") // Iterar sobre un set print("Animales en setA:") for animal in setA { print(animal) } // Limpiar un set setA.removeAll() print("Set A después de limpiar: \(setA)")