Eliminación de duplicados de un array en Swift: tutorial para principiantes

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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\n

Por qué es importante: escenarios prácticos

\n\n

Imagina 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\n

En 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á!

\n\n

Método 1: Usar Set — la forma más rápida y sencilla

\n\n

La 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.

\n\n

Ejemplo de código:

\n\n
let 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\n

Este 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.

\n\n

¿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
\n\n

Método 2: Conservar el orden con NSOrderedSet

\n\n

Si 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.

\n\n

Ejemplo de código:

\n\n
import 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\n

Ventajas: 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.

\n\n

Método 3: Filtrado personalizado con conservación del orden (Swift puro)

\n\n

Esta 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.

\n\n

Ejemplo de código:

\n\n
func removeDuplicates<T: Hashable>(from array: [T]) -> [T] {\n    var seen = Set<T>()\n    var result = [T]()\n    \n    for element in array {\n                

Blogs

Book Recommendations