#1. Utilisation de l' Arrayindice avec plage
Avec Swift 5, lorsque vous écrivez…
let newNumbers = numbers[0...position]
… newNumbersN'est pas de type Array<Int>mais est de type ArraySlice<Int>. C'est parce que Arrayles subscript(_:)retours et ArraySlice<Element>qui, selon Apple, présentent une vue sur le stockage d'une plus grande baie.
En outre, Swift fournit également Arrayun initialiseur appelé init(_:)qui nous permet de créer un nouveau tableau à partir d'un sequence(y compris ArraySlice).
Par conséquent, vous pouvez utiliser subscript(_:)avec init(_:)pour obtenir un nouveau tableau à partir des n premiers éléments d'un tableau:
let array = Array(10...14) // [10, 11, 12, 13, 14]
let arraySlice = array[0..<3] // using Range
//let arraySlice = array[0...2] // using ClosedRange also works
//let arraySlice = array[..<3] // using PartialRangeUpTo also works
//let arraySlice = array[...2] // using PartialRangeThrough also works
let newArray = Array(arraySlice)
print(newArray) // prints [10, 11, 12]
# 2. Utilisation de Arrayla prefix(_:)méthode de
Swift fournit une prefix(_:)méthode pour les types conformes au Collectionprotocole (y compris Array). prefix(_:)a la déclaration suivante:
func prefix(_ maxLength: Int) -> ArraySlice<Element>
Renvoie une sous-séquence, jusqu'à maxLength en longueur, contenant les éléments initiaux.
Apple déclare également:
Si la longueur maximale dépasse le nombre d'éléments de la collection, le résultat contient tous les éléments de la collection.
Par conséquent, comme alternative à l'exemple précédent, vous pouvez utiliser le code suivant afin de créer un nouveau tableau à partir des premiers éléments d'un autre tableau:
let array = Array(10...14) // [10, 11, 12, 13, 14]
let arraySlice = array.prefix(3)
let newArray = Array(arraySlice)
print(newArray) // prints [10, 11, 12]