Comment se débarrasser des doublons dans un tableau Swift : guide clair pour débutants
\n\nAvez-vous déjà été confronté à une situation où votre tableau en Swift se transformait en "dépotoir" de données répétées ? Si oui, vous n'êtes pas seul. La question "Removing duplicate elements from an array in Swift" sur Stack Overflow a recueilli des milliers de vues – et ce n'est pas surprenant. Travailler avec des doublons est l'une des tâches les plus courantes que tout développeur rencontre, qu'il soit débutant ou expert. Aujourd'hui, nous allons une fois pour toutes comprendre comment supprimer élégamment et efficacement les éléments en double d'un tableau en Swift, en utilisant des méthodes éprouvées et des exemples de code réels.
\n\nPourquoi c'est important : scénarios pratiques
\n\nImaginez que vous développez une application de gestion de contacts. L'utilisateur importe une liste de 1000 entrées, mais elle contient 200 doublons. Ou vous travaillez avec des données provenant d'une API, où le même produit apparaît plusieurs fois. Les doublons encombrent non seulement l'interface, mais peuvent également entraîner des erreurs logiques, une augmentation du temps de traitement et une confusion dans les données. Savoir nettoyer les tableaux est une compétence de base qui vous fera gagner des heures de débogage.
\n\nDans ce tutoriel, nous allons examiner plusieurs approches : de l'utilisation simple de Set à des méthodes plus avancées avec conservation de l'ordre des éléments et travail avec des types de données personnalisés. C'est parti !
Méthode 1 : Utilisation de Set – la méthode la plus rapide et la plus simple
\n\nLa réponse la plus populaire sur Stack Overflow pour supprimer les doublons d'un tableau en Swift est d'utiliser la structure Set. Set est une collection non ordonnée d'éléments uniques. En convertissant un tableau en Set, nous nous débarrassons automatiquement de toutes les répétitions, puis nous le reconvertissons en tableau.
Exemple de code :
\n\nlet numbers = [1, 2, 3, 2, 4, 5, 1, 3]\nlet uniqueNumbers = Array(Set(numbers))\nprint(uniqueNumbers) // Sortie : [5, 2, 3, 1, 4] (l'ordre peut varier)\n\n\nCette méthode fonctionne très rapidement, en particulier sur les grands tableaux, car Set utilise le hachage. Mais il y a un détail : l'ordre des éléments n'est pas conservé. Si l'ordre d'origine est important pour vous, lisez la suite.
Quand utiliser Set ?
\n- \n
- Lorsque l'ordre des éléments n'a pas d'importance. \n
- Lorsque vous avez besoin d'une solution la plus rapide possible. \n
- Lorsque vous travaillez avec des types primitifs (Int, String, Double, etc.) qui sont conformes au protocole
Hashable. \n
Méthode 2 : Conservation de l'ordre avec NSOrderedSet
\n\nSi vous travaillez sur un projet où l'environnement d'exécution Objective-C est autorisé (par exemple, des projets anciens ou des bases de code mixtes), vous pouvez utiliser NSOrderedSet. Cette classe de Foundation conserve l'ordre d'ajout et supprime automatiquement les doublons.
Exemple de code :
\n\nimport Foundation\n\nlet names = ["Anna", "Boris", "Anna", "Victor", "Boris"]\nlet uniqueNames = NSOrderedSet(array: names).array as! [String]\nprint(uniqueNames) // Sortie : ["Anna", "Boris", "Victor"]\n\n\nAvantages : l'ordre est conservé, le code est court. Inconvénients : utilise un pont avec Objective-C, ce qui peut être excessif pour un projet Swift pur. De plus, NSOrderedSet est plus lent que le Set natif en raison de frais généraux supplémentaires.
Méthode 3 : Filtrage personnalisé avec conservation de l'ordre (Swift pur)
\n\nC'est la méthode la plus flexible et recommandée pour le Swift moderne. Nous créons un tableau vide pour le résultat et un Set pour suivre les éléments déjà rencontrés. En parcourant le tableau d'origine, nous ajoutons un élément au résultat uniquement s'il n'est pas déjà dans le Set.
Exemple de code :
\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