# 1. Usando Array
subíndice con rango
Con Swift 5, cuando escribes ...
let newNumbers = numbers[0...position]
... newNumbers
No es de tipo Array<Int>
sino de tipo ArraySlice<Int>
. Eso es porque Array
's subscript(_:)
devuelve una ArraySlice<Element>
que, según Apple, presenta una visión sobre el almacenamiento de cierta matriz más grande.
Además, Swift también proporciona Array
un inicializador llamado init(_:)
que nos permite crear una nueva matriz a partir de un sequence
(incluido ArraySlice
).
Por lo tanto, puede usar subscript(_:)
coninit(_:)
para obtener una nueva matriz a partir de los primeros n elementos de una matriz:
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. Usando Array
el prefix(_:)
método de
Swift proporciona un prefix(_:)
método para tipos que se ajustan al Collection
protocolo (incluido Array
). prefix(_:)
tiene la siguiente declaración:
func prefix(_ maxLength: Int) -> ArraySlice<Element>
Devuelve una subsecuencia, hasta maxLength de longitud, que contiene los elementos iniciales.
Apple también afirma:
Si la longitud máxima supera el número de elementos de la colección, el resultado contiene todos los elementos de la colección.
Por lo tanto, como alternativa al ejemplo anterior, puede utilizar el siguiente código para crear una nueva matriz a partir de los primeros elementos de otra matriz:
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]