¿Cómo devolver los primeros 5 objetos de Array en Swift?
En Swift, ¿existe una forma inteligente de utilizar los métodos de orden superior en Array para devolver los 5 primeros objetos? La forma obj-c de hacerlo era guardar un índice y realizar un bucle for a través de la matriz incrementando el índice hasta que fuera 5 y devolviendo la nueva matriz. ¿Hay alguna manera de hacer esto filter
con map
o reduce
?
Con diferencia, la forma más sencilla de obtener los primeros N elementos de una matriz Swift es utilizar prefix(_ maxLength: Int)
:
let array = [1, 2, 3, 4, 5, 6, 7]
let slice5 = array.prefix(5) // ArraySlice
let array5 = Array(slice5) // [1, 2, 3, 4, 5]
la frase es:
let first5 = Array(array.prefix(5))
Esto tiene la ventaja de ser seguro en límites. Si el recuento al que pasa prefix
es mayor que el recuento de la matriz, simplemente devuelve la matriz completa.
NOTA: como se señala en los comentarios, Array.prefix
en realidad devuelve un ArraySlice
, no un Array
.
Si necesita asignar el resultado a un Array
tipo o pasarlo a un método que espera un Array
parámetro, deberá forzar el resultado a un Array
tipo:let first5 = Array(array.prefix(5))
Puedes hacerlo muy fácil sin filter
, map
, reduce
o prefix
simplemente devolviendo un rango de tu matriz a través de un subíndice:
var wholeArray = [1, 2, 3, 4, 5, 6]
var n = 5
var firstFiveSlice = wholeArray[0..<n] // 1,2,3,4,5
let firstFiveArray = Array(firstFiveSlice)