désolé si c'est une question stupide, mais tout ce que j'essaye semble être faux! (Je suis nouveau à Swift).
J'ai 2 tableaux de chaînes que j'ai besoin de comparer pour les allumettes, puis de retourner un tableau avec la position de l'index de ces matches .... IE: P>
let array1 = ["abc", "def", "ghi", "jkl", "xyz", "uhr"] let array2 = ["ghi", "xyz", "uhr"] // Search array1 for instances of array2 // Result I want is: [2, 4, 5]
3 Réponses :
var indexArr: [Int] = [] for element in array2 { if let elementIndex = array1.firstIndex(of: element) { indexArr.append(elementIndex) } } print(indexArr)
J'ai fini par aller avec celui-ci mais en toute justice, ils travaillaient tous! Merci a tous :)
var results: [Int] = [] for i in 0..<array1.count { for j in 0..<array2.count { if array1[i] == array2[j] { results.append(i) } } } print(results)
Pour une solution efficace, vous pouvez créer un em> index em>. L'index plane chaque élément dans la première matrice à sa position dans la matrice. Les deux tableaux ne sont traversés qu'une seule fois: si les éléments de Le deuxième paramètre est une fermeture qui contrôle la valeur à mettre dans le dictionnaire dans le cas de touches en double. Ici, nous choisissons la position de la première occurrence d'un élément de la matrice. P> p> array1 code> ne sont pas connus pour être uniques, l'index doit être calculé légèrement différemment: p> < Pré> xxx pré>
Résultat = Array2.map ({Array1.Firstindex (0 $ 0) ?? -1}) Code> ou
Soit résultant2 = Array2.compactMap ({array1.firstindex (de: $ 0)}) < / code>? Il manque des cas: ce qui se passe si vous avez deux fois
"ghi" code> dans
array1 code>? Que se passe-t-il si vous n'avez pas
"ghi" code> dans
array1 code>?
Merci pour votre aide PAL - dans ce cas, les valeurs de tableau 1 seront toujours uniques. Votre 2e point soulève une question cependant ... Je suppose qu'il pourrait y avoir une occasion où une array 2 pourrait être ["ghi", "xyz", "uhr", "zzz"] - dans ce cas "ZZZ" Existe dans le tableau 1 et Idéalement, j'en ai besoin d'être ignoré ....
Puis compactmap et firstindex (de :) devrait fonctionner bien
résultat2 code> est le moyen "le plus court" de le faire en utilisant des méthodes "de base" avec des fermetures. Mais si vous commencez en tant que développeur (et non seulement un swift), il n'ya pas de problème à propos de vous faire un manuel pour ou de la boucle pour obtenir un algorithmique de base.