Sets en Swift: sin orden ni duplicados

Resumen

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.

  • Los elementos no están ordenados, así que no puedes acceder a ellos por posición.
  • No admite elementos duplicados, solo guarda valores únicos.

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.