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的元素location和length.
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]
如果您想按范围内的索引删除项目,您必须反转索引以从最高索引开始,否则您将获得超出范围的异常。还要考虑索引是从零开始的。
这是一个安全的版本,它也检查数组的上限。
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)
您可以在此处找到更通用、更有效的解决方案
| 归档时间: |
|
| 查看次数: |
2886 次 |
| 最近记录: |