我在parse.com上有一个包含许多对象的类。每个对象的关键之一是国家的名称。如何使用重复的国家/地区名称以编程方式删除所有对象。我能想到的唯一方法是非常长的,所以任何想法都会非常感激。
这是我能想到的最好的。
var objectId = [String]()
var Country = [String]()
var city = [String]()
var deletes = [String]()
var query = PFQuery(className: "Route")
query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]!, error: NSError!) -> Void in
for object in objects {
objectId.append(object.objectId)
Country.append(object["Country"] as String)
city.append(object["Start"] as String)
}
println(objectId)
println(Country)
var i = Int()
for i=0; i < objectId.count; i++ {
var j = Int()
for j = i + 1 ; j < objectId.count; j++ {
if Country[i] == Country[j] {
println(objectId[j])
var deleteQuery = PFQuery(className: "Route")
deleteQuery.getObjectInBackgroundWithId(objectId[j], block: { (object: PFObject!, error2: NSError!) -> Void in
if error2 == nil {
object.delete()
}
})
}
}
}
}
我确信必须有一种更简单的方法。
答案 0 :(得分:1)
您完成此操作的方式是正确的,只需记住将限制从默认值100更改为1000.
如果您需要在超过1000行的表/类上执行此操作,那么您需要创建一个服务器端作业来执行此操作并使用query.each()
函数迭代所有行,然后清理重复项。
答案 1 :(得分:1)
我认为您可以通过创建NSMutableSet
国家/地区名称来使重复搜索更加轻松。运行返回的对象,事先将国家/地区名称添加到集testing membership。如果某个对象的国家/地区已经在该集合中,请将其添加到duplicates
的可变数组中。
您的代码的删除部分可以大大改进。在基于集合的测试填充重复数组之后,使用PFObject(deleteAllInBackground:duplicates)
这将替换从for i=0; i < objectId.count; i++ {