Introduction : Pourquoi « Trouver l'indice » est une base à connaître par cœur
\n\nImaginez : vous développez une application iOS. Vous avez un tableau de tâches, et l'utilisateur souhaite supprimer une tâche spécifique par son nom. Ou peut-être cherchez-vous la position d'un élément pour le mettre à jour dans la liste. Dans les deux cas, vous avez besoin de la même chose — trouver l'indice d'un élément dans un tableau Swift. Cette tâche est si courante que la question sur Stack Overflow a recueilli des milliers de vues. Et ce n'est pas un hasard : la recherche d'indice est l'un des scénarios les plus fréquents dans le développement quotidien.
\n\nDans ce tutoriel, nous allons passer en revue toutes les façons de trouver l'indice d'un élément en Swift : du simple firstIndex(of:) à la recherche avancée avec des fermetures. Vous apprendrez à travailler avec des tableaux de chaînes, de nombres et d'objets personnalisés. C'est parti !
1. Préparation : Qu'est-ce qu'un indice dans un tableau Swift ?
\n\nAvant de plonger dans le code, rappelons les bases. Un tableau en Swift est une collection ordonnée d'éléments. Chaque élément a son indice — un nombre entier commençant à 0. Le premier élément a l'indice 0, le second 1, et ainsi de suite.
\n\nlet fruits = ["🍎 Pomme", "🍌 Banane", "🍒 Cerise"]\n// Indices : 0 1 2\n\n\nLorsque nous disons « trouver l'indice d'un élément », nous voulons dire : « Retourne-moi le numéro de la position à laquelle se trouve cet élément ». En Swift, il existe plusieurs méthodes élégantes pour cela. Passons-les en revue dans l'ordre.
\n\n2. La méthode classique : firstIndex(of:) — le chemin le plus simple
\n\nDepuis Swift 4.2, la méthode firstIndex(of:) est devenue la méthode standard pour trouver l'indice d'un élément. Elle retourne une valeur optionnelle Int? — si l'élément est trouvé, vous obtenez l'indice ; sinon — nil.
Exemple avec un tableau de chaînes
\n\nlet fruits = ["Pomme", "Banane", "Cerise", "Datte"]\n\nif let index = fruits.firstIndex(of: "Cerise") {\n print("Indice de 'Cerise' : \\(index)") // Affiche : 2\n} else {\n print("Élément non trouvé")\n}\n\n\nNotez que firstIndex(of:) recherche la première occurrence. Si le tableau contient des doublons, il retournera uniquement le premier indice.
Exemple avec un tableau de nombres
\n\nlet numbers = [10, 20, 30, 40, 50]\n\nif let position = numbers.firstIndex(of: 30) {\n print("Le nombre 30 se trouve à la position \\(position)") // 2\n}\n\n\nImportant : Cette méthode fonctionne uniquement avec les types qui sont conformes au protocole Equatable. Tous les types standard (Int, String, Double, Bool) y sont déjà conformes.
3. Recherche par condition : index(where:) — une flexibilité sans limites
\n\nEt si vous avez besoin de trouver l'indice non pas par une valeur exacte, mais par une condition ? Par exemple, trouver le premier élément supérieur à 25, ou une chaîne qui commence par une certaine lettre. Pour cela, il existe la méthode firstIndex(where:) (auparavant index(where:)).
Syntaxe avec une fermeture
\n\nlet scores = [15, 22, 37, 41, 19]\n\nif let index = scores.firstIndex(where: { $0 > 25 }) {\n print("Le premier élément supérieur à 25 se trouve à l'indice \\(index)") // 2 (valeur 37)\n}\n\n\nRecherche par propriété d'objet
\n\nSupposons que vous ayez un tableau de structures personnalisées :
\n\nstruct User {\n let name: String\n let age: Int\n}\n\nlet users = [\n User(name: "Anna", age: 25),\n User(name: "Boris", age: 30),\n User(name: "Victor", age: 22)\n]\n\n// Trouvons l'indice de l'utilisateur nommé "Boris"\nif let index = users.firstIndex(where: { $0.name == "Boris" }) {\n print("Boris se trouve à l'indice \\(index)") // 1\n}\n\n\nCette approche est incroyablement puissante. Vous pouvez utiliser n'importe quelle condition booléenne : vérifier plusieurs propriétés, utiliser des expressions régulières ou même appeler des fonctions à l'intérieur de la fermeture.
\n\n4. Gestion des doublons : comment trouver tous les indices
\n\nM