¿Cómo puedo hacer algo como esto? Tome los primeros n elementos de una matriz:
newNumbers = numbers[0..n]
Recibiendo actualmente el siguiente error:
error: could not find an overload for 'subscript' that accepts the supplied arguments
EDITAR:
Aquí está la función en la que estoy trabajando.
func aFunction(numbers: Array<Int>, position: Int) -> Array<Int> {
var newNumbers = numbers[0...position]
return newNumbers
}

Slicede unaArray, sino más bien crear una nueva matriz de una rebanada. Un elenco usaría elasoperador:numbers as Arraylo que resultaría en un error...cambiaron a..<; los tres puntos (puntos suspensivos) se han mantenido igual. De todas maneras, gracias por el recordatorio; Actualicé la respuesta.# 1. Usando
Arraysubíndice con rangoCon Swift 5, cuando escribes ...
...
newNumbersNo es de tipoArray<Int>sino de tipoArraySlice<Int>. Eso es porqueArray'ssubscript(_:)devuelve unaArraySlice<Element>que, según Apple, presenta una visión sobre el almacenamiento de cierta matriz más grande.Además, Swift también proporciona
Arrayun inicializador llamadoinit(_:)que nos permite crear una nueva matriz a partir de unsequence(incluidoArraySlice).Por lo tanto, puede usar
subscript(_:)coninit(_:)para obtener una nueva matriz a partir de los primeros n elementos de una matriz:# 2. Usando
Arrayelprefix(_:)método deSwift proporciona un
prefix(_:)método para tipos que se ajustan alCollectionprotocolo (incluidoArray).prefix(_:)tiene la siguiente declaración:Apple también afirma:
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:
fuente
fuente
Una variante más usando un
extensionnombre de argumentorangeEsta extensión usa
RangeyClosedRangePruebas:
fuente
Manera funcional de la matriz:
rango:
La ventaja de este método es que su implementación es segura.
fuente