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": ""]]
Run Code Online (Sandbox Code Playgroud)
现在,我想从值是空字符串的数组中删除字典。我已经通过嵌套的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"]]
Run Code Online (Sandbox Code Playgroud)
如何使用高阶函数(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"]] */
Run Code Online (Sandbox Code Playgroud)
要么,
let filteredDetails = details
.filter { !$0.values.contains(where: { $0.isEmpty }) }
Run Code Online (Sandbox Code Playgroud)
另外请注意:看到您使用带有几个看似“静态”键的字典数组时,我建议您考虑使用更合适的数据结构,例如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")] */
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3945 次 |
| 最近记录: |