Jak pobrać ostatni element tablicy w Swift?

81

Mogę to zrobić:

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

ale na pewno jest ładniejszy sposób?

joseph.hainline
źródło
Co w tym złego? Przypuszczalnie możesz podać własne rozszerzenie, aby dodać metodę „.lastElement”.
Thilo
7
Nie ma w nim nic złego poza tym, że jest brzydki.
joseph.hainline
1
Może nie jest zły, ale podatny na jednorazowe błędy. Napisałbym rozszerzenie, jak wspomniano w odpowiedziach.
thestoneage
Miałem nadzieję, że Swift ma lastIndexvar, który jest dostępny w Kotlinie. Wygląda na to, że na razie będę musiał się trzymać endIndex - 1.
aldok

Odpowiedzi:

87

Aktualizacja: Swift 2.0 zawiera teraz first:T?i last:T?wbudowane właściwości.


Kiedy zajdzie taka potrzeba, możesz upiększyć wbudowany interfejs Swift API, udostępniając własne rozszerzenia, np .:

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

Umożliwia to teraz dostęp do ostatniego elementu w dowolnej tablicy za pomocą:

[1,5,7,9,22].last
mit
źródło
Dzięki! BTW, endIndexnie trzeba odwoływać się za pośrednictwem self.
Rudolf Adamkovič
14
Od Xcode6-Beta5 lastwłaściwość jest wbudowana (taka, jaka jest first). Zwraca, niljeśli tablica jest pusta.
Pang
2
Problem z tą implementacją polega na tym, że ulega awarii, jeśli tablica jest pusta.
Luca Angeletti
5
Jeśli nie jesteś pierwszy, jesteś ostatni - Ricky Bobby
Kevin Burandt
1
nie potrzebujesz tego już w Swift 3. Poniżej znajdziesz lepsze odpowiedzi. .last jest wbudowany.
sww314
101

Od beta5tamtej pory istnieje firsti lastwłaściwość

Oprócz pozyskiwania przez Array first i last, leniwe kolekcje również implementują first (i last, jeśli mogą indeksować dwukierunkowo), a także isEmpty.

Erik Aigner
źródło
8
byłoby miło dołączyć link do tej dokumentacji
tim peterson
1
nie mów mi, powiedz @ joseph.hainline :)
Erik Aigner
Byłoby miło z przykładem
KML
Dzięki za to! Co ciekawe, szablon master / detail systemu iOS 10 w Xcode 8.3.3 nadal używa kodu w postaci x [x.count-1] - ale DUŻO dłużej - zamiast x.last.
Glenn
23

Możesz pobrać ostatni element tablicy przy użyciu lastwłaściwości.

Kod:

let lastElement = yourArray.last
BLC
źródło
9

Możesz także pobrać i usunąć ostatni element z tablicy
removeLast()

Przykład:

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

Zaczerpnięte z dokumentów Apple (to źródło wygasło, ale przykłady można znaleźć na tej stronie dokumentacji )

pbaranski
źródło
1
W przeciwieństwie do funkcji removeLast ObjC, Swift 4 nie jest wystarczająco inteligentny, aby wiedzieć, czy w tablicy nie pozostały żadne elementy i ulegnie awarii, jeśli zostanie wypróbowana na pustej tablicy.
JScarry
7

szybki 5:

if let last = a.last {
   print(last)
}
Hamid Tayebi
źródło
1

edytuj dla Swift 2.2

extension Array {
    var last: Element {
        return self[self.endIndex - 1]
    }
}
Ahmed Safadi
źródło