Quelqu'un a-t-il une idée de la façon d'écrire le code suivant sous une forme abrégée?
if self.atPoint(locationUser) == blueMarkArray[0] || self.atPoint(locationUser) == blueMarkArray[1] || self.atPoint(locationUser) == blueMarkArray[2] || self.atPoint(locationUser) == blueMarkArray[3] || self.atPoint(locationUser) == blueMarkArray[4] || self.atPoint(locationUser) == blueMarkArray[5] || self.atPoint(locationUser) == blueMarkArray[6]{ print("its here") }
De plus, je ne veux pas m'engager sur un nombre fixe d'éléments dans le tableau blueMarkArray
. Il doit être aussi variable que possible, car par exemple il peut contenir 4 éléments, mais aussi 12 éléments.
Pour chaque réponse, je suis très reconnaissant.
EDIT:
Comment pouvez-vous accéder à l'élément trouvé si je veux écrire ce qui suit: someNode.position = elementOfMarkArray.position
3 Réponses :
Utilisez la méthode contains
du tableau
if let index = blueMarkArray.firstIndex(of: self.atPoint(locationUser)) { // }
ou, si vous ne devez vérifier que jusqu'à l'index 6
comme dans votre exemple, utilisez
if (blueMarkArray[0...6].contains(self.atPoint(locationUser))) { // }
si vous souhaitez obtenir l'index de l'élément, vous pouvez utiliser les méthodes firstIndex
des lastIndex
p >
if (blueMarkArray.contains(self.atPoint(locationUser))) { // }
Cela fonctionne, mais comment pouvez-vous accéder à l'élément trouvé si je veux écrire ce qui suit: someNode.position = elementOfMarkArray.position
Voir la réponse mise à jour
Votre premier et deuxième exemple sont les mêmes, le second ne vérifie en fait que jusqu'à l'index 6. Il n'est pas non plus nécessaire d'utiliser des parenthèses pour la condition d'une instruction if
dans Swift, contrairement à Objective- C (et le modèle commun est de ne pas les utiliser).
@ DávidPásztor une erreur lors de l'édition, maintenant corrigée
Malheureusement, je ne comprends toujours pas très bien comment utiliser index
. Malheureusement, cela ne fonctionne pas de cette façon: if let index = blueMarkArray.firstIndex (of: self.atPoint (locationUser) as! SKSpriteNode) {someNode.position = index.position}
Je l'ai et ça marche. Merci beaucoup
Vous devez simplement utiliser la méthode Si vous avez également besoin d'accéder à l'élément qui correspond à l'objet / valeur que vous recherchez, vous pouvez utiliser ou contains
de Array
, qui retournera true si l'un des éléments du tableau est égal à self.atPoint (locationUser) .
if let locationIndex = blueMarkArray.firstIndex(of: self.atPoint(locationUser)) {
let location = blueMarkArray[locationIndex]
someNode.position = location.position
}
en premier (où :)
ou firstIndex(of:)
.if let location = blueMarkArray.first(where: {$0 == self.atPoint(locationUser)}) {
someNode.position = location.position
}
if blueMarkArray.contains(self.atPoint(locationUser)) {
print("it's here")
}
Vous pouvez utiliser la méthode array
contains
:
if blueMarkArray.contains(self.atPoint(locationUser)) { print("its here") }
Ce n'est probablement pas un doublon car je ne pense pas que vous souhaitiez tester si un point est dans la liste de cette manière, en raison de problèmes de précision en virgule flottante. Vous voudrez probablement tester si le point est proche de l'un de ces points en calculant leur distance.
La réponse à votre question ajoutée est disponible ici: stackoverflow.com/a/24069331 .
@MartinR Je crois que vous avez tort de marquer cette question comme un autre problème de recherche dans la liste . Veuillez voter pour rouvrir.
@trojanfoe: Si je comprends bien, OP demande comment raccourcir la comparaison avec plusieurs éléments de tableau, ou comment trouver sa position dans un tableau. Cela a déjà été demandé et répondu. - Il est possible de trouver l’élément de tableau le plus "proche", mais ce n’est pas ce qui est demandé ici.
@MartinR A convenu que le PO n'a pas posé la question correctement; en plus d'ignorer les nuisances des classes de collection, etc., ils semblent manquer de compréhension des graphiques 2D.
@trojanfoe: Je ne t'ai pas vu ici depuis un moment - bon retour!
@MartinR Ouais ça fait un moment. Merci beaucoup!