Swift删除Array范围内的对象

Ekr*_*kra 3 arrays range swift

我有一个数组作为类中的属性.

Class Custom {
 let objArray: [CustomClass]
}
Run Code Online (Sandbox Code Playgroud)

我想在一个范围内删除objArray中的一些项目.所以我在下面做了

let newVar  = objArray[1...3]
Run Code Online (Sandbox Code Playgroud)

新对象被正确删除但返回值在newVar中,因为数组是值类型,我怎么能使原始反映相同.

当索引递增时,下面的代码会使Index超出范围

for i in 1...3 {

  objArray.remove(at: 1)
}
Run Code Online (Sandbox Code Playgroud)

======

上述问题的最佳方法是什么?

任何正确方向的提示都将受到高度赞赏.

The*_*ger 10

使用removeSubrange数组的方法.制作一个有效range的元素locationlength.

var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let range = 1...3
array.removeSubrange(range)

print(array)
Run Code Online (Sandbox Code Playgroud)

输出: [1, 5, 6, 7, 8, 9, 10]

注意:范围应该是有效范围我的意思是它不应该从数组中输出.

这是你的方式(通过for循环) 我们不能通过它们的索引在循环中删除对象,因为每次对象删除数组的计数和对象索引都会改变,因此超出范围崩溃可能会出现,或者你可能得到错误的输出.所以你必须得到另一个阵列的帮助.见下面的例子: -

var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
var newArray: [Int] = []
let minRange = 1
let maxRange = 3
for i in 0..<array.count {
     if i >= minRange && i <= maxRange {
        /// Avoid
        continue
     }

     newArray.append(array[i])
}

print(newArray)
Run Code Online (Sandbox Code Playgroud)

输出: [1, 5, 6, 7, 8, 9, 10]


vad*_*ian 5

如果您想按范围内的索引删除项目,您必须反转索引以从最高索引开始,否则您将获得超出范围的异常。还要考虑索引是从零开始的。

这是一个安全的版本,它也检查数组的上限。

var array = [1, 2, 3, 4, 5, 6]
for i in (0...3).reversed() where i < array.count {
    array.remove(at: i)
}

print(array) // [5, 6]
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到更通用、更有效的解决方案