Wie rufe ich das letzte Element eines Arrays in Swift ab?

80

Ich kann dies tun:

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

aber sicher gibt es einen schöneren Weg?

joseph.hainline
quelle
Was ist daran falsch? Vermutlich können Sie Ihre eigene Erweiterung bereitstellen, um eine ".lastElement" -Methode hinzuzufügen.
Thilo
7
Nichts ist falsch daran, außer dass es hässlich ist.
Joseph.Hainline
1
Vielleicht nicht falsch, aber anfällig für einmalige Fehler. Ich würde eine Erweiterung schreiben, wie in den Antworten erwähnt.
Thestoneage
Ich hatte gehofft, Swift hat lastIndexvar, das in Kotlin erhältlich ist. Scheint, als müsste ich mich vorerst daran halten endIndex - 1.
Aldok

Antworten:

85

Update: Swift 2.0 enthält jetzt first:T?und last:T?Eigenschaften eingebaut.


Bei Bedarf können Sie die integrierte Swift-API hübscher gestalten, indem Sie Ihre eigenen Erweiterungen bereitstellen, z.

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

Auf diese Weise können Sie jetzt auf das letzte Element eines Arrays zugreifen mit:

[1,5,7,9,22].last
Mythos
quelle
Vielen Dank! Übrigens endIndexmuss nicht über referenziert werden self.
Rudolf Adamkovič
14
Ab Xcode6-Beta5 ist die lastEigenschaft (wie sie ist first) integriert. Es wird zurückgegeben, nilwenn das Array leer ist.
Pang
2
Das Problem bei dieser Implementierung ist, dass sie abstürzt, wenn das Array leer ist.
Luca Angeletti
5
Wenn Sie nicht der Erste sind, sind Sie der Letzte - Ricky Bobby
Kevin Burandt
1
Sie brauchen dies in Swift 3 nicht mehr. Weitere Antworten finden Sie weiter unten. .last ist eingebaut.
sww314
101

Ab beta5sofort gibt es ein firstund lastEigentum

Zusätzlich zur ersten und letzten Array-Erfassung implementieren die Lazy-Sammlungen auch first (und last, wenn sie bidirektional indizieren können) sowie isEmpty.

Erik Aigner
quelle
8
wäre schön, einen Link zu dieser Dokumentation aufzunehmen
tim peterson
1
Sag es mir nicht, sag es @ joseph.hainline :)
Erik Aigner
Wäre schön mit einem Beispiel
KML
Danke dafür! Interessanterweise verwendet die iOS 10-Master- / Detailvorlage in Xcode 8.3.3 weiterhin Code der Form x [x.count-1] - jedoch VIEL länger - anstelle von x.last.
Glenn
22

Sie können das letzte Element eines Arrays mithilfe der lastEigenschaft abrufen.

Code:

let lastElement = yourArray.last
BLC
quelle
9

Sie können auch das letzte Element aus dem Array abrufen und entfernen
removeLast()

Beispiel:

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

Entnommen aus Apple-Dokumenten (diese Quelle ist abgelaufen, aber Beispiele finden Sie auf dieser Dokumentationsseite )

pbaranski
quelle
1
Im Gegensatz zur ObjC removeLast-Funktion ist Swift 4 nicht intelligent genug, um zu wissen, ob das Array keine Elemente mehr enthält, und stürzt ab, wenn es in einem leeren Array versucht wird.
JScarry
6

schnell 5:

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

schnell bearbeiten 2.2

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