¿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?

joseph.hainline
fuente
¿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
mito
fuente
¡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.

Erik Aigner
fuente
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
BLC
fuente
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 )

pbaranski
fuente
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
7

rápido 5:

if let last = a.last {
   print(last)
}
Hamid Tayebi
fuente
1

editar para swift 2.2

extension Array {
    var last: Element {
        return self[self.endIndex - 1]
    }
}
Ahmed Safadi
fuente