Swift删除数组

时间:2016-08-05 06:34:29

标签: arrays swift swifty-json

我遇到了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

3 个答案:

答案 0 :(得分:0)

尝试

            //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。

答案 1 :(得分:0)

问题是你正在改变循环中循环的计数。您不需要这样做,可能使用过滤器或相关方法

答案 2 :(得分:0)

我建议在修改之前规范化数据。但如果没有你可以试试这个:

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常量。