Raj*_*r R 0 arrays dictionary higher-order-functions swift
我有一个字典数组
    var details:[[String:String]] = [["name":"a","age":"1"],["name":"b","age":"2"],["name":"c","age":""]]
    print(details)//[["name": "a", "age": "1"], ["name": "b", "age": "2"], ["name": "c", "age": ""]]
现在,我想从值是空字符串的数组中删除字典。我已经通过嵌套的for循环实现了这一点。
    for (index,detail) in details.enumerated()
    {
       for (key, value) in detail
       {
        if value == ""
        {
            details.remove(at: index)
        }
       }
    }
    print(details)//[["name": "a", "age": "1"], ["name": "b", "age": "2"]]
如何使用高阶函数(Map,Filter,Reduce和FlatMap)实现此目标
根据您的for循环,似乎想从字典中删除details,如果任何键值对其中包含一个空的String,""作为值。为此,您可以例如filter在上应用details,并作为的谓词filter,检查values每个字典的属性是否不存在""(/不存在empty String)。例如
var details: [[String: String]] = [
    ["name": "a", "age": "1"],
    ["name": "b", "age": "2"],
    ["name": "c", "age": ""]
]
let filteredDetails = details.filter { !$0.values.contains("") }
print(filteredDetails)
/* [["name": "a", "age": "1"], 
     "name": "b", "age": "2"]] */
要么,
let filteredDetails = details
    .filter { !$0.values.contains(where: { $0.isEmpty }) }
另外请注意:看到您使用带有几个看似“静态”键的字典数组时,我建议您考虑使用更合适的数据结构,例如custom Struct。例如:
struct Detail {
    let name: String
    let age: String
}
var details: [Detail] = [
    Detail(name: "a", age: "1"),
    Detail(name: "b", age: "2"),
    Detail(name: "c", age: "")
]
let filteredDetails = details.filter { !$0.name.isEmpty && !$0.age.isEmpty }
print(filteredDetails)
/* [Detail(name: "a", age: "1"),
    Detail(name: "b", age: "2")] */