¿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
}
Slice
de unaArray
, sino más bien crear una nueva matriz de una rebanada. Un elenco usaría elas
operador:numbers as Array
lo 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
Array
subíndice con rangoCon Swift 5, cuando escribes ...
...
newNumbers
No 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
Array
un 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
Array
elprefix(_:)
método deSwift proporciona un
prefix(_:)
método para tipos que se ajustan alCollection
protocolo (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
extension
nombre de argumentorange
Esta extensión usa
Range
yClosedRange
Pruebas:
fuente
Manera funcional de la matriz:
rango:
La ventaja de este método es que su implementación es segura.
fuente