2
votes

Boucle à travers une plage d'un tableau

Comment puis-je parcourir une plage de array ? Exemple si j'avais 5 objets dans un tableau . Je veux faire une boucle de l'index [3] à la fin du array dans cet exemple, il passerait par et mettrait à jour les objets 3-5 et sauter les objets 1 et 2. C'est ce que j'ai jusqu'à présent en utilisant le Méthode stride (ce code ne fonctionne pas). Est-ce la bonne méthode? Comment puis-je y parvenir?

stride(from: markers[index], to: markers.endIndex, by: 1).forEach { i in
    // Do something for each array object
}


0 commentaires

3 Réponses :


1
votes

Vous pouvez simplement parcourir votre tranche de tableau en supprimant les n premiers éléments:

let markers = ["a","b","c","d","e"]

for index in markers.indices.dropFirst(2) {
    print(markers[index])
}

Si vous avez besoin de changer votre tableau, vous pouvez parcourir une tranche de ses indices:

XXX


0 commentaires

0
votes

Vous pouvez simplement parcourir le array en utilisant Range Operator dans Swift comme,

var markers = ["M1","M2","M3","M4","M5"]
let count = markers.count
if count > 2 {
    for i in 2..<count {
        //add your code here..
    }
}

Dans le code ci-dessus, j'ai utilisé opérateur de plage semi-ouverte (..


1 commentaires

Cela plantera si le tableau est vide ou s'il contient moins de 3 éléments et que vous essayez d'indiquer le tableau avec cet index



2
votes

Vous pouvez utiliser l'opérateur range pour obtenir des séquences d'index ou des tranches du tableau. Ce que vous utilisez dépend de ce que vous essayez de faire. Pour plus de clarté, je vais omettre la vérification des erreurs.

Par exemple:

let range = 2...4
immutableLetters.enumerated()
    .filter { (index,_) in range.contains(index) }
    .forEach { (index, element) in
        print("\(index) \(element)")
    }

Si vous vouliez modifier les éléments du tableau que vous passez dans les indices plutôt que dans le éléments

let immutableLetters = ["a","b","c","d","e"]
let upperCasedFromThreeOn = immutableLetters[3...].map { $0.uppercased() }
// upperCasedFromThreeOn = ["D","E"]

Remarquez ici que nous devons spécifier les deux limites car la plage ne sait rien du tableau.

C'est souvent plus Swifty em > de ne pas modifier les choses en place donc, si cela correspond à votre cas d'utilisation, vous pourriez envisager quelque chose comme ceci:

var mutableLetters = ["a","b","c","d","e"]
(3..<mutableLetters.count).forEach {
    mutableLetters[$0] = mutableLetters[$0].uppercased()
}

Pour terminer, vous devez parfois connaître à la fois l'index et l'élément. Vous pouvez utiliser un forEach sur les index comme ci-dessus, mais une autre façon est d'utiliser enumerated () cela crée un tuple de l'index et de l'élément.

let letters = ["a", "b", "c", "d", "e"]
letters[3...].forEach { print($0) } // prints d e 

// or you can print up to index 3
letters[...3].forEach { print($0) } // prints a b c d

// or print elements 1-3 inclusive
letters[1...3].forEach { print($0) } // prints b c d 

// or print elements 1-3 excluding index 3
letters[1..<3].forEach { print($0) } // prints b c d 

Ici, j'ai utilisé un filtre après l'énumération pour que les indices correspondent au tableau d'origine.


2 commentaires

Cela plantera également si le tableau est vide ou s'il contient moins de 3 éléments. Notez que enumerate renvoie le décalage de l'élément (pas nécessairement le même que l'index selon le type de collection)


@LeoDabus, il était explicitement indiqué dans la réponse que l'erreur vérifiée avait été omise pour plus de clarté. De plus, dans les exemples donnés, les tableaux ne peuvent pas avoir des nombres d'éléments différents; Ils sont codés en dur.