【问题标题】:How to copy end of the Array in swift?如何快速复制数组的末尾?
【发布时间】:2016-09-21 17:44:53
【问题描述】:

一定有一些非常优雅的方法可以使用 Swift 从某个索引开始复制数组的末尾,但我就是找不到它,所以我以这个结尾:

func getEndOfArray<T>( arr : [T], fromIndex : Int? = 0) -> [T] {
    var i=0;
    var newArray : [T] = [T]()
    for item in arr {
        if i >= fromIndex {
            newArray.append(item)
        }
        i = i + 1;
    }
    return newArray // returns copy of the array starting from index fromIndex
}

有没有更好的方法来做到这一点而无需额外的功能?

【问题讨论】:

    标签: swift


    【解决方案1】:

    还有一个……

    let array = [1, 2, 3, 4, 5]
    let fromIndex = 2
    let endOfArray = array.dropFirst(fromIndex)
    print(endOfArray) // [3, 4, 5]
    

    这给出了一个ArraySlice,对于大多数人来说应该已经足够了 目的。如果您需要真正的Array,请使用

    let endOfArray = Array(array.dropFirst(fromIndex))
    

    如果起始索引大于(或等于)元素计数,则会创建一个空数组/切片。

    【讨论】:

    【解决方案2】:

    你可以使用后缀:

    let array = [1,2,3,4,5,6]
    let lastTwo = array.suffix(2) // [5, 6]
    

    正如评论中提到的:这为您提供了一个 ArraySlice 对象,这对于大多数情况来说已经足够了。如果你真的需要一个 Array 对象,你必须强制转换它:

    let lastTwoArray = Array(lastTwo)
    

    【讨论】:

    • 至于dropFirstdropLastprefixsuffix返回ArraySlice对象,所以如果你需要一个数组,你必须将结果传递给Array()。跨度>
    【解决方案3】:

    您现在可以下标一个开放式范围。这将包括从索引 5 开始的元素。

    Swift 4.2

    array[5...]
    

    【讨论】:

      【解决方案4】:

      这是一种可能的解决方案,可能还有更多

      let array = [1, 2, 3, 4, 5]
      let endOfArray = Array(array[2..<array.endIndex]) // [3, 4, 5]
      

      或者使用动态索引和范围检查

      let array = [1, 2, 3, 4, 5]
      let index = 2
      let endOfArray : [Int]
      if index < array.count {
        endOfArray = Array(array[index..<array.endIndex]) // [3, 4, 5]
      } else {
        endOfArray = array
      }
      

      由于Array的范围订阅返回ArraySlice&lt;Element&gt;,因此需要重新初始化数组

      【讨论】:

      • “2”可以是像fromIndex这样的变量吗?
      【解决方案5】:

      您可以在 Swift 4 中使用新方法 removeFirst(_:)

      var array = [1, 2, 3, 4, 5]
      array.removeFirst(2)
      print(array) // [3, 4, 5]
      

      【讨论】:

        【解决方案6】:

        你可以使用filter

        func getEndOfArray( arr : [Int], fromIndex : Int? = 0) -> [Int] {
            let filteredArray = arr.filter({$0 <= fromIndex})
        
            return filteredArray
        }
        

        为了这个例子,冒昧地更改为[Int]

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-25
          • 2015-06-25
          • 2019-01-14
          • 1970-01-01
          • 2021-02-21
          • 1970-01-01
          相关资源
          最近更新 更多