ios - 如何删除数组中的项目?

标签 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)

最佳答案

您在枚举同一数组时同时删除了项目。改用过滤器:

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

关于ios - 如何删除数组中的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38477569/

相关文章:

ios - WKWebView 中的 evaluateJavaScript() 仅在第一次运行

ios - 发现很难在 Swift 中更新 firebase 中的值

ios - 无法从 URLSessionTaskDelegate 获取数据

ios - 具有动态宽度的 XIB,在中心固定高度 - 编程约束似乎不起作用

ios - 触摸方法未在放置在 UIScrollView 中的 UIView 上调用

objective-c - 新的对象文字是否向后兼容 iOS 5?

json - swift 3 将 json 参数发布到 api

ios - 通知 View 的公共(public)函数

json - 我如何在 Swift 中解码 JSON,它是一个包含双嵌套项目的数组?

ios - 如何调试缓慢的应用程序启动