【问题标题】:Filtering an array of dictionaries过滤字典数组
【发布时间】:2018-07-30 06:08:07
【问题描述】:

我有一个像这样的字典数组.. 我必须创建一个数组,其中包含搜索键匹配的所有键或包含“builder_name”键值

"data": [
    {
        "Websiteuser": {
            "builder_name": "Mahagun India Pvt Ltd "
        },
        "MessageBoardAppusersAlls": {
            "id": "68",
            "message": "Fairpockets is a concept which has originated to not only provide fair priced properties but also allow only fair or trusted builders to list their properties on our website.",
            "created": "2018-07-23 14:24:52"
        },
        "Appusermessages": {
            "status": "1"
        },
        "Project": {
            "project_name": "Mahagun Mantra II"
        }
    },
    {
        "Websiteuser": {
            "builder_name": "Mahagun India Pvt Ltd "
        },
        "MessageBoardAppusersAlls": {
            "id": "69",
            "message": "In the current market anybody can list or advertise properties at any price which they want. This brings confusion to both buyers and sellers and they are not able to ascertain what price to ask as a seller or what price to pay as a buyer.",
            "created": "2018-07-23 14:25:00"
        },
        "Appusermessages": {
            "status": "1"
        },
        "Project": {
            "project_name": "Mahagun Mantra Villaments"
        }
    }
]

【问题讨论】:

  • 到目前为止你尝试了什么
  • let searchPredicate = NSPredicate(format: "builder_name CONTAINS[C] %@", String(searchText)) let array = (mainArray as NSArray).filtered(using: searchPredicate)
  • 那段代码你有没有得到任何错误(你应该通过编辑提出问题)?请注意,您缺少一个级别:“网站用户”。所以至少应该是(format: "Websiteuser .builder_name CONTAINS[C]...
  • @Pritam 请使用您迄今为止尝试过的代码更新您的问题

标签: arrays swift


【解决方案1】:

挑战在于键 builder_name 在另一个字典中,键为 Websiteuser

不要predicatefilter 带有闭包

let query = "India"
let filteredArray = mainArray.filter { (dictionary) -> Bool in
    guard let webSiteUser = dictionary["Websiteuser"] as? [String:String],
        let builderName = webSiteUser["builder_name"] else { return false }
    return builderName.range(of: query, options: .caseInsensitive) != nil
}

CONTAINS[C] 的等价物是range(of: options: .caseInsensitive) != nil

【讨论】:

    猜你喜欢
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    相关资源
    最近更新 更多