【问题标题】:Remove first n elements from array of Int in Swift [duplicate]从Swift中的Int数组中删除前n个元素[重复]
【发布时间】:2023-03-27 14:07:01
【问题描述】:

如何在 Swift 中从 Int 数组中删除第一个 n 元素?

例如:

var array = [0, 1, 2, 3, 4, 5, 6]
let n = 4

结果数组包含以下元素:

[4, 5, 6]

【问题讨论】:

    标签: ios arrays swift


    【解决方案1】:
    let result = Array(array.dropFirst(n))
    

    (感谢 KPM 和 WolfLink 指出 let result = array.dropFirst(n)result 设置为 ArraySlice,如果原始数组被释放,它将不再有效。)

    【讨论】:

    • 小心,这只会返回一个子序列,即数组上的一个特殊视图,它避免了 n 个第一个元素。记忆仍会在那里,徘徊。
    • @KPM 记忆肯定在那里徘徊。如果不是,我们如何访问原始数组?
    • Il 在您释放原始数组后仍然存在,因为子序列仍将保留整个原始数组。
    • 在这种情况下,result 是一个 ArraySlice,其索引与原始数组中的索引相同。尝试访问 result[0] 将导致 Index Out Of Bounds 错误。
    • let result = Array(array.dropFirst(n)) 将使result 成为一个具有自己索引的单独数组(这样result[0] 将是有效的,假设结果不为空)
    【解决方案2】:

    比约翰逊先生的回答稍微简洁:

    let result = array.suffix(3)
    

    我还是会选择他的,因为 dropFirstsuffix 更直观/可读。

    【讨论】:

      【解决方案3】:

      您可以使用范围对数组进行切片:

      var array = [1,2,3,4,5,6]
      let n = 4 
      print(array[n..<array.count]) //[4,5,6]
      

      【讨论】:

      • 这不再适合我了:Cannot subscript a value of type '[String]' with an index of 'CountableRange&lt;Int&gt;'.
      • 小心,这只会返回一个子序列,即数组上的一个特殊视图,它避免了 n 个第一个元素。记忆仍会在那里,徘徊。
      猜你喜欢
      • 1970-01-01
      • 2014-11-02
      • 1970-01-01
      • 1970-01-01
      • 2012-04-01
      • 2017-06-04
      • 2011-11-13
      • 2013-05-20
      相关资源
      最近更新 更多