Ios 如何删除数组中的项?

Ios 如何删除数组中的项?,ios,swift,swift3,Ios,Swift,Swift3,我正在使用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:

我正在使用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)!)
       }
    }

var索引=0
重复{
如果数组[索引]==2 | |数组[索引]==4{
array.removatendex(索引)
}
指数+=1
}while(索引
在枚举同一数组的同时删除项。改用过滤器:

var array: [Int] = [0,1,2,3,4,5]
array = array.filter{$0 != 2}
或者,对于多个值,使用
设置

let unwantedValues: Set<Int> = [2, 4, 5]
array = array.filter{!unwantedValues.contains($0)}

删除索引2后,您的计数为5,但枚举时您的索引的计数值为6。您要删除多个项目还是单个项目?如果条件匹配,我要删除项目。@Happiehappie,我认为每次FOR循环检查新数组(我指的是删除的结果1)。谢谢。我认为过滤器可以处理它。但是,我已经尝试了很多次,因为数组中的数字代码也可以实现这一点。这可能意味着它与array.enumerate()中的for(index,number)不同。我不确定它。@noellee
enumerate()
method返回新的常量序列,这对于所有迭代都是相同的。因此,当您从原始
数组
中删除元素时,此序列中的元素数保持不变,从而导致最后超出缩小的
数组
范围。另一方面,
对于数组中的数字
动态地使用
数组
,所以在这种情况下没有问题,但我认为这是一种糟糕的编码方式。
let unwantedValues: Set<Int> = [2, 4, 5]
array = array.filter{!unwantedValues.contains($0)}
array = array.filter{!Set([2, 4, 5]).contains($0)}