如何删除数组中的项目? [复制]

Posted

技术标签:

【中文标题】如何删除数组中的项目? [复制]【英文标题】:How to remove item in Array? [duplicate] 【发布时间】:2016-07-20 09:35:20 【问题描述】:

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

【问题讨论】:

删除索引 2 后您的计数为 5,但您枚举时的索引计数值为 6 您要删除多个项目还是单个项目? 如果条件匹配,我想删除项目。 @Happiehappie,我认为每次 FOR 循环检查新数组(我的意思是删除结果一个。) 【参考方案1】:

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

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)

【讨论】:

谢谢。我认为过滤器可以处理它。但是,我已经尝试了很多次 for number in array 代码也可以实现这一点。也许这意味着它与 for (index, number) in array.enumerate() 不同。我不确定。 @noellee enumerate() 方法返回新的常量序列,所有迭代都相同。因此,当您从原始 array 中删除元素时,此序列中的元素数量保持不变,导致最后的 array 范围缩小。另一方面,for number in array 动态使用array,所以在这种情况下没有问题,但我认为无论如何它是糟糕的样式编码。

以上是关于如何删除数组中的项目? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何删除 mongodb 特定文档中的数组中的项目? [复制]

如何删除数组中索引 X 处的项目? [复制]

如何删除数组中的第一个元素? [复制]

如何从javascript中的数组中删除单个实例? [复制]

如何从javascript中的数组中删除最后一个索引元素? [复制]

JavaScript:如何删除外部数组中的所有方括号? [复制]