我只想要倒数第二个元素,而不是最后两个,如:
let streets = ["Adams", "Bryant", "Channing", "Douglas", "Evarts"]
let penultimate = streets.suffix(2)
print(penultimate) // ["Douglas", "Evarts"]
此外,我不想使用语法streets[3]
,因为该数组不断填充条目。
答案 0 :(得分:3)
您只需删除集合的最后一个元素并返回结果的最后一个元素:
extension BidirectionalCollection {
var elementBeforeLast: Element? {
return dropLast().last
}
}
用法:
if let elementBeforeLast = streets.elementBeforeLast {
print(elementBeforeLast) // "Douglas"
}
答案 1 :(得分:2)
只需写一个扩展名
extension Array {
func penultimate() -> Element? {
if self.count < 2 {
return nil
}
let index = self.count - 2
return self[index]
}
}
您可以像使用它
yourArr.penultimate()
这是一个Playground示例,它可以按预期工作
答案 2 :(得分:0)
这是一个 Collection
的解决方案。
public extension Collection {
@inline(__always)
var penultimate: Element? {
guard let index = index(endIndex, offsetBy: -2, limitedBy: startIndex) else {
return nil
}
return self[index]
}
}