如何在字典中搜索值,然后删除包含该值的记录?

时间:2019-04-15 16:02:20

标签: swift dictionary

在我当前正在编写的程序中,我有一个名为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:如何在字典中搜索特定值,如果找到该特定值,则删除它所驻留的记录。

2 个答案:

答案 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匹配的所有内容。