¿Cómo devolver los primeros 5 objetos de Array en Swift?

Resuelto bogen asked hace 9 años • 13 respuestas

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 filtercon mapo reduce?

bogen avatar Feb 15 '15 22:02 bogen
Aceptado

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 prefixes mayor que el recuento de la matriz, simplemente devuelve la matriz completa.

NOTA: como se señala en los comentarios, Array.prefixen realidad devuelve un ArraySlice, no un Array.

Si necesita asignar el resultado a un Arraytipo o pasarlo a un método que espera un Arrayparámetro, deberá forzar el resultado a un Arraytipo:let first5 = Array(array.prefix(5))

mluisbrown avatar Sep 09 '2015 23:09 mluisbrown

Puedes hacerlo muy fácil sin filter, map, reduceo prefixsimplemente 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)
Christian avatar Feb 15 '2015 15:02 Christian