如何在Swift中获取数组的最后一个元素?


80

我可以做这个:

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

但是肯定有更漂亮的方法吗?


那怎么了 据推测,您可以提供自己的扩展名以添加“ .lastElement”方法。
Thilo 2014年

7
它除了丑陋外没有其他问题。
joseph.hainline 2014年

1
也许没有错,但容易出现一次性错误。我会写答案中提到的扩展名。
thestoneage 2014年

我希望SwiftlastIndex可以在Kotlin中使用var。似乎我endIndex - 1现在必须坚持。
阿尔多克

Answers:


85

更新:Swift 2.0现在包括first:T?last:T?内置属性。


在需要时,可以通过提供自己的扩展来使内置的Swift API更漂亮,例如:

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

现在,您可以使用以下命令访问任何数组上的最后一个元素:

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

谢谢!顺便说一句,endIndex不需要通过引用self
RudolfAdamkovič2014年

14
从Xcode6-Beta5开始,该last属性是内置的(和一样first)。nil如果数组为空,则返回。

2
此实现的问题是,如果Array为空,则确实会崩溃。
卡·安吉莱蒂

5
如果您不是第一个,那么您倒数第二个
-Ricky

1
您无需在Swift 3中再使用此功能。请参见下文,以获得更好的答案。.last是内置的。
sww314 '17

101

截至beta5目前,有firstlast属性

除了Array首先获取和最后获取之外,惰性集合还首先实现(如果它们可以双向索引,则实现最后),以及isEmpty。


8
包括此文档的链接将非常不错
tim peterson 2014年

1
不要告诉我,告诉@ joseph.hainline :)
Erik Aigner

将用一个例子可以很好
KML

谢谢你!有趣的是,Xcode 8.3.3中的iOS 10主/详细模板仍使用x [x.count-1]形式的代码-但要更长一些-而不是x.last。
Glenn

22

您可以使用last属性来获取Array的最后一个元素。

码:

let lastElement = yourArray.last

9

您还可以从数组中获取和删除最后一个元素
removeLast()

例:

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

取自Apple文档(此来源已过期,但您可以在此文档页面中找到示例)


1
与ObjC removeLast功能不同,Swift 4不够聪明,无法知道数组中是否没有元素,如果在空数组上尝试,它将崩溃。
JScarry '17


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.