¿Cómo obtengo el último elemento de una matriz en Swift?


81

Puedo hacer esto:

var a = [1,5,7,9,22]
a.count               // 5
a[a.count - 1]        // 22
a[a.endIndex - 1]     // 22

pero seguramente hay una forma mas bonita?


¿Qué pasa con esa forma? Presumiblemente, puede proporcionar su propia extensión para agregar un método ".lastElement".
Thilo

7
No tiene nada de malo, excepto que es feo.
joseph.hainline

1
Quizás no esté mal, pero es propenso a errores puntuales. Escribiría una extensión como se menciona en las respuestas.
thestoneage

Esperaba que Swift tuviera lastIndexvar, que está disponible en Kotlin. Parece que tendría que quedarme endIndex - 1por ahora.
aldok

Respuestas:


87

Actualización: Swift 2.0 incluye ahora first:T?y last:T?propiedades incorporadas.


Cuando lo necesite, puede hacer que la API Swift incorporada sea más bonita proporcionando sus propias extensiones, por ejemplo:

extension Array {
    var last: T {
        return self[self.endIndex - 1]
    }
}

Esto le permite ahora acceder al último elemento en cualquier matriz con:

[1,5,7,9,22].last

¡Gracias! Por cierto, endIndexno es necesario hacer referencia a través de self.
Rudolf Adamkovič

14
A partir de Xcode6-Beta5, la lastpropiedad está integrada (como está first). Vuelve nilsi la matriz está vacía.
Pang

2
El problema con esta implementación es que se bloquea si el Array está vacío.
Luca Angeletti

5
Si no eres el primero, eres el último - Ricky Bobby
Kevin Burandt

1
ya no lo necesita en Swift 3. Consulte a continuación para obtener mejores respuestas. .last está incorporado.
sww314

101

A partir de beta5ahora hay una propiedad firstylast

Además de que Array adquiere primero y último, las colecciones perezosas también implementan primero (y último si pueden indexar bidireccionalmente), así como isEmpty.


8
Sería bueno incluir un enlace a esta documentación
tim peterson

1
no me digas, dile a @ joseph.hainline :)
Erik Aigner

Sería bueno con un ejemplo
KML

¡Gracias por esto! Curiosamente, la plantilla maestra / detallada de iOS 10 en Xcode 8.3.3 todavía usa código de la forma x [x.count-1], pero MUCHO más largo, en lugar de x.last.
Glenn

23

Puede recuperar el último elemento de una matriz utilizando la lastpropiedad.

Código:

let lastElement = yourArray.last

9

También puede obtener y eliminar el último elemento de la matriz
removeLast()

Ejemplo:

var array = [1, 2, 3]
let removed = array.removeLast()
// array is [1, 2]
// removed is 3

Tomado de documentos de Apple (esta fuente caducó, pero puede encontrar ejemplos en esta página de documentación )


1
A diferencia de la función removeLast de ObjC, Swift 4 no es lo suficientemente inteligente como para saber si no quedan elementos en la matriz y se bloqueará si se prueba en una matriz vacía.
JScarry


1

editar para swift 2.2

extension Array {
    var last: Element {
        return self[self.endIndex - 1]
    }
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.