我正在编码Swift,并与一个问题混淆。
我遇到了索引超出范围错误当我尝试在数组枚举期间从数组中删除一项时。
这是我的错误代码:
var array :[Int] = [0,1,2,3,4,5]
for (index, number) in array.enumerate() {
if array[index] == 2 {
array.removeAtIndex(index) // Fatal error: Index out of range
}
}
这是否意味着在每个 for 循环期间不会调用 array.enumerate() ?
我必须这样更改我的代码:
for number in array {
if number == 2 || number == 5 {
array.removeAtIndex(array.indexOf(number)!)
}
}
Or
var index = 0
repeat {
if array[index] == 2 || array[index] == 4 {
array.removeAtIndex(index)
}
index += 1
} while(index < array.count)
当您枚举同一数组时,您会同时删除项目。使用过滤器代替:
var array: [Int] = [0,1,2,3,4,5]
array = array.filter{$0 != 2}
或者,对于多个值,使用Set
:
let unwantedValues: Set<Int> = [2, 4, 5]
array = array.filter{!unwantedValues.contains($0)}
同一行:
array = array.filter{!Set([2, 4, 5]).contains($0)}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)