0
votes

Comparez un tableau avec un autre et renvoyez ensuite l'index des résultats correspondants

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] 


4 commentaires

Résultat = Array2.map ({Array1.Firstindex (0 $ 0) ?? -1}) 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" dans array1 ? Que se passe-t-il si vous n'avez pas "ghi" dans array1 ?


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


3 Réponses :


1
votes
var indexArr: [Int] = []

for element in array2 {
    if let elementIndex = array1.firstIndex(of: element) {
       indexArr.append(elementIndex)
    }
}

print(indexArr)

1 commentaires

J'ai fini par aller avec celui-ci mais en toute justice, ils travaillaient tous! Merci a tous :)



1
votes
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)

0 commentaires

1
votes

Pour une solution efficace, vous pouvez créer un index . 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: xxx

si les éléments de array1 ne sont pas connus pour être uniques, l'index doit être calculé légèrement différemment: < Pré> xxx

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.


0 commentaires