Cómo deshacerse de los duplicados en un array de Swift: guía clara para principiantes
\n\n¿Alguna vez te has encontrado con una situación en la que tu array en Swift se convirtió en un "vertedero" de datos repetidos? Si es así, no estás solo. La pregunta "Removing duplicate elements from an array in Swift" en Stack Overflow ha acumulado miles de visitas, y no es de extrañar. Trabajar con duplicados es una de las tareas más comunes que enfrenta todo desarrollador, ya sea principiante o profesional. Hoy vamos a resolver de una vez por todas cómo eliminar elementos duplicados de un array en Swift de manera elegante y eficiente, utilizando métodos probados y ejemplos de código reales.
\n\nPor qué es importante: escenarios prácticos
\n\nImagina que estás escribiendo una aplicación para gestionar contactos. El usuario importa una lista de 1000 registros, pero hay 200 duplicados. O estás trabajando con datos de una API, donde el mismo producto aparece varias veces. Los duplicados no solo saturan la interfaz, sino que también pueden provocar errores lógicos, aumentar el tiempo de procesamiento y generar confusión en los datos. Saber limpiar arrays es una base que te ahorrará horas de depuración.
\n\nEn este tutorial, exploraremos varios enfoques: desde el uso simple de Set hasta métodos más avanzados que conservan el orden de los elementos y trabajan con tipos de datos personalizados. ¡Vamos allá!
Método 1: Usar Set — la forma más rápida y sencilla
\n\nLa respuesta más popular en Stack Overflow para eliminar duplicados de un array en Swift es usar la estructura Set. Set es una colección desordenada de elementos únicos. Al convertir un array en un Set, automáticamente eliminamos todas las repeticiones, y luego lo convertimos de nuevo a un array.
Ejemplo de código:
\n\nlet numbers = [1, 2, 3, 2, 4, 5, 1, 3]\nlet uniqueNumbers = Array(Set(numbers))\nprint(uniqueNumbers) // Salida: [5, 2, 3, 1, 4] (el orden puede variar)\n\n\nEste método funciona muy rápido, especialmente en arrays grandes, ya que Set utiliza hashing. Pero hay un detalle: el orden de los elementos no se conserva. Si el orden original es importante para ti, sigue leyendo.
¿Cuándo usar Set?
\n- \n
- Cuando el orden de los elementos no importa. \n
- Cuando necesitas la solución más rápida posible. \n
- Cuando trabajas con tipos primitivos (Int, String, Double, etc.) que cumplen con el protocolo
Hashable. \n
Método 2: Conservar el orden con NSOrderedSet
\n\nSi trabajas en un proyecto donde está permitido el runtime de Objective-C (por ejemplo, proyectos antiguos o bases de código mixtas), puedes usar NSOrderedSet. Esta clase de Foundation conserva el orden de inserción y elimina automáticamente los duplicados.
Ejemplo de código:
\n\nimport Foundation\n\nlet names = ["Ana", "Boris", "Ana", "Víctor", "Boris"]\nlet uniqueNames = NSOrderedSet(array: names).array as! [String]\nprint(uniqueNames) // Salida: ["Ana", "Boris", "Víctor"]\n\n\nVentajas: se conserva el orden, el código es corto. Desventajas: se utiliza un puente con Objective-C, lo que puede ser excesivo para un proyecto puro de Swift. Además, NSOrderedSet es más lento que el Set nativo debido a la sobrecarga adicional.
Método 3: Filtrado personalizado con conservación del orden (Swift puro)
\n\nEsta es la forma más flexible y recomendada para Swift moderno. Creamos un array vacío para el resultado y un Set para rastrear los elementos ya vistos. Al recorrer el array original, agregamos el elemento al resultado solo si aún no está en el Set.
Ejemplo de código:
\n\nfunc removeDuplicates<T: Hashable>(from array: [T]) -> [T] {\n var seen = Set<T>()\n var result = [T]()\n \n for element in array {\n