如何在Swift中的数组中获得倒数第二个元素?

时间:2018-09-23 02:07:28

标签: swift element

我只想要倒数第二个元素,而不是最后两个,如:

let streets = ["Adams", "Bryant", "Channing", "Douglas", "Evarts"]
let penultimate = streets.suffix(2)
print(penultimate) // ["Douglas", "Evarts"]

此外,我不想使用语法streets[3],因为该数组不断填充条目。

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示例,它可以按预期工作

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]
    }
}