如何删除数组中的项目?

时间:2016-07-20 09:35:21

标签: 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: Index out of range
            }
        }

这是否意味着在每个for循环期间都不会调用array.enumerate()?

我必须改变我的代码:

    for number in array {
       if number == 2 || number == 5 {
          array.removeAtIndex(array.indexOf(number)!)
       }
    }

var index = 0
repeat {
    if array[index] == 2 || array[index] == 4 {
        array.removeAtIndex(index)
    }
    index += 1

} while(index < array.count)

1 个答案:

答案 0 :(得分:4)

当您枚举相同的数组时,您正在同时删除项目。请改用过滤器:

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)}