快速删除数组中的项目

Posted

技术标签:

【中文标题】快速删除数组中的项目【英文标题】:Swift remove item in array 【发布时间】:2016-08-05 06:34:29 【问题描述】:

我对 SwityJson 和删除数组元素有疑问

为了进一步处理数据,我必须删除一些元素。

这是我的代码

self.jsonObj = JSON(value)

//Filtern 

for i in 0 ..< self.jsonObj["customer"].count 

    if self.jsonObj["customer"][i]["Group_A"].string == "Mr Abcde" 
            || self.jsonObj["customer"][i]["Group_A"].string == "Mr Bcde" 
            || self.jsonObj["custome"][i]["Group_B"].string == "Mr Abcde" 
            || self.jsonObj["customer"][i]["Group_B"].string == "Mr Bcde" 
    
        self.jsonObj["customer"].arrayObject?.removeAtIndex(i)
    

现在的问题:如果运行代码,并非所有找到的元素都被删除。 我认为循环遍历所有元素太快了。删除任务没有时间?! 我该如何处理。循环中...找到了一些东西...停止循环...删除项目...开始循环..

通过创建三次 If 语句,一切都很好,所有找到的元素都被删除,但是,这不是我想要的。

或者是否可以过滤数组然后说

filterdData = jsonObj

【问题讨论】:

【参考方案1】:

试试

            //Filtern 

 for i in 0 ..< self.jsonObj["customer"].count 
      let groupA = self.jsonObj["customer"][i]["Group_A"].string
      let groupB = self.jsonObj["customer"][i]["Group_B"].string

            if  groupA == "Mr Abcde" || groupA == "Mr Bcde" || groupB == "Mr Abcde" || groupB == "Mr Bcde"
                    self.jsonObj["customer"].rawArray.removeAtIndex(i)
                               
 

这不仅减少了对 JSON 对象的调用(可能会节省速度),而且它还使用 rawArray 而不是 arrayObject 直接写入数组而不是通过 arrayObject 到 rawArray。

【讨论】:

对不起,结果是一样的..:( 不是所有找到的元素都被删除了【参考方案2】:

问题是您正在更改从循环内终止循环的计数。您不需要这样做,也许使用过滤器或相关方法来代替

【讨论】:

【参考方案3】:

我建议在修改数据之前对其进行规范化。但如果失败了,你可以试试这个:

let filteredJson = self.jsonObj["customer"].filter  elem  in
  !(["Mr Abcde", "Mr Bcde"].contains(elem.["Group_A"].string) ||
    ["Mr Abcde", "Mr Bcde"].contains(elem.["Group_B"].string))

然后使用filteredJson 常量。

【讨论】:

好主意,但是如何将filteredJson 转换为JSON 格式??

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

试图快速删除从firebase检索到的数组中的重复值

如何删除数组中的确切项目

从角度2中的存储数组中删除项目

我想删除数组中的所有项目,除了数组中的最后一项推送[重复]

如何使用过滤器数组删除数组中的项目? [复制]

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