在我当前正在编写的程序中,我有一个名为Model的对象,该对象具有多个属性。这些属性之一是称为model_UUID的UUID。我将所有模型存储在名为“模型”的字典中,并且能够将它们显示在tableView的单个部分中而没有任何问题。
然后,我想根据Model的另一个属性(即codexName)将显示分为几部分。通过使用以下代码将原始字典排序到第二个二维字典中,我能够做到这一点
var presortedModels = models
var sortedModels: [SortedModel] = []
while !presortedModels.isEmpty {
guard let referenceModel = presortedModels.first else {
print("all models are sorted.")
return []
}
let filteredModels = presortedModels.filter { (model) ->
Bool in
return model.codexName == referenceModel.codexName
}
presortedModels.removeAll { (model) -> Bool in
return model.codexName == referenceModel.codexName
}
let append = SortedModel(codexName:
referenceModel.codexName, models: filteredModels)
sortedModels.append(append)
}
return sortedModels.sorted {$0.codexName < $1.codexName}
这也没有问题。
现在,我想从表中删除选定的模型,这是我遇到问题的地方。我曾经以为,由于UUID对于每个模型都是唯一的,因此不管在tableView中的哪个部分,我都可以只在原始数组中查找UUID并将其删除。删除后,我可以再次调用排序功能,并使用新的sortedModels填充tableView。我遇到的问题是,仅当模型位于表视图的第0部分时才会删除模型。如果未找到UUID,尝试删除任何其他模型将把文本踢出。这是我当前正在使用的代码
if editingStyle == .delete {
// Delete Model from models
let removeUUID =
sortedModels[indexPath.section].models[indexPath.row].model_uuid
if
(self.models[indexPath.row].model_uuid.contains(removeUUID)) {
//print("model removed from model array")
self.models.remove(at: indexPath.row)
} else {
print("UUID not found within models")
}
// Delete Model from SortedModels
sortedModels[indexPath.section].models.remove(at:
indexPath.row)
// Delete the row from the data source
tableView.deleteRows(at: [indexPath], with: .fade)
// check to see if the section is empty, if it is delete
the section
if sortedModels[indexPath.section].models.count == 0 {
print("this section is scheduled for demolition")
}
// Save Changes
saveModels()
sortedModels = sortModels()
tableView.reloadData()
TLDR:如何在字典中搜索特定值,如果找到该特定值,则删除它所驻留的记录。
答案 0 :(得分:0)
我认为这可以为您提供帮助,这是一种通用方法,但是您可以适应自己的情况。
var posts: [[String:String]] = [
["a": "1", "b": "2"],
["x": "3", "y": "4"],
["a": "5", "y": "6"]]
for (index, var post) in posts.enumerate() {
post.removeValueForKey("a")
posts[index] = post }
/* This will posts = [
["b": "2"],
["y": "4", "x": "3"],
["y": "6"]]*/
答案 1 :(得分:0)
通过使用以下代码,我能够实现自己的目标
// Delete Model from models
let removeUUID =
sortedModels[indexPath.section].models[indexPath.row].model_uuid
models = models.filter { (model) -> Bool in
return model.model_uuid != removeUUID
}
此代码从选定的单元格中获取UUID,然后从原始数组中过滤出与该UUID匹配的所有内容。