【问题标题】:How do I fetch the last element of an array in Swift?如何在 Swift 中获取数组的最后一个元素?
【发布时间】:2014-06-04 05:10:34
【问题描述】:

我可以这样做:

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

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

【问题讨论】:

  • 这样有什么问题?据推测,您可以提供自己的扩展来添加“.lastElement”方法。
  • 没什么毛病,就是丑。
  • 也许没有错,但容易出现一次性错误。我会写答案中提到的扩展。
  • 我希望 Swift 有 lastIndex var,它在 Kotlin 中可用。看来我现在必须坚持使用endIndex - 1

标签: swift


【解决方案1】:

beta5 开始,现在有一个firstlast 属性

除了 Array 获取 first 和 last,惰性集合还实现了 first(如果它们可以双向索引,则实现 last),以及 isEmpty。

【讨论】:

  • 最好包含指向此文档的链接
  • 别告诉我,告诉@joseph.hainline :)
  • 举个例子就好了
  • 谢谢!有趣的是,Xcode 8.3.3 中的 iOS 10 主/详细模板仍然使用 x[x.count-1] 形式的代码——但要长得多——而不是 x.last。
【解决方案2】:

更新: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 引用。
  • 从 Xcode6-Beta5 开始,last 属性是内置的(first 也是如此)。如果数组为空,则返回nil
  • 这个实现的问题是如果 Array 为空,它确实会崩溃。
  • 如果你不是第一个,你就是最后一个 - Ricky Bobby
  • 您在 Swift 3 中不再需要这个。请参阅下文以获得更好的答案。 .last 是内置的。
【解决方案3】:

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

代码:

let lastElement = yourArray.last

【讨论】:

    【解决方案4】:

    斯威夫特 5:

    if let last = a.last {
       print(last)
    }
    

    【讨论】:

      【解决方案5】:

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

      例子:

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

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

      【讨论】:

      • 与 ObjC 的 removeLast 功能不同,Swift 4 不够聪明,无法知道数组中是否没有剩余元素,如果在空数组上尝试会崩溃。
      【解决方案6】:

      为 swift 2.2 编辑

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

      【讨论】:

        猜你喜欢
        • 2022-06-28
        • 2012-01-28
        • 2012-09-27
        • 2020-07-03
        • 2022-09-29
        • 2012-08-18
        • 2016-07-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多