# 1. Mit Array
Index mit Bereich
Mit Swift 5, wenn Sie schreiben ...
let newNumbers = numbers[0...position]
… newNumbers
Ist nicht vom Typ, Array<Int>
sondern vom Typ ArraySlice<Int>
. Das liegt daran Array
, dass es subscript(_:)
eine Rückgabe gibt ArraySlice<Element>
, die laut Apple einen Blick auf den Speicher eines größeren Arrays bietet.
Außerdem bietet Swift auch Array
einen Initialisierer namens init(_:)
, der es uns ermöglicht, ein neues Array aus einem sequence
(einschließlich ArraySlice
) zu erstellen .
Daher können Sie subscript(_:)
mit init(_:)
verwenden, um ein neues Array aus den ersten n Elementen eines Arrays zu erhalten:
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. Mit Array
der prefix(_:)
Methode von
Swift bietet eine prefix(_:)
Methode für Typen, die dem Collection
Protokoll entsprechen (einschließlich Array
). prefix(_:)
hat die folgende Erklärung:
func prefix(_ maxLength: Int) -> ArraySlice<Element>
Gibt eine Teilsequenz mit einer Länge von bis zu maxLength zurück, die die Anfangselemente enthält.
Apple sagt auch:
Wenn die maximale Länge die Anzahl der Elemente in der Sammlung überschreitet, enthält das Ergebnis alle Elemente in der Sammlung.
Daher können Sie alternativ zum vorherigen Beispiel den folgenden Code verwenden, um aus den ersten Elementen eines anderen Arrays ein neues Array zu erstellen:
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]