Swift中如何筛选Active值为true的学生完整详情?
筛选Active值为true的学生详情(Swift实现)
这里有一个简洁且安全的Swift实现方案,帮你筛选出所有Active值为true的学生详情,同时保留原有的学校、code等信息:
第一步:定义初始数据(修正语法后的正确格式)
首先我们先把你提供的details字典调整为符合Swift语法的格式:
let details: [String: Any] = [ "code": 235, "school": "sp school", "students": [ ["name": "1student", "Active": false], ["name": "2student", "Active": true], ["name": "3student", "Active": true], ["name": "4student", "Active": false], ["name": "5student", "Active": false] ] ]
第二步:实现筛选逻辑
接下来是核心的筛选代码,全程使用安全的类型转换避免崩溃:
// 安全取出students数组,若类型错误或不存在则提前退出 guard var students = details["students"] as? [[String: Any]] else { print("学生数据格式无效") return } // 过滤出Active字段为true的学生 let activeStudents = students.filter { student in // 处理字段不存在或非Bool类型的情况,这类学生不会被保留 student["Active"] as? Bool == true } // 构建新的详情字典,保留原有字段并替换为过滤后的学生列表 var filteredDetails = details filteredDetails["students"] = activeStudents // 打印最终结果 print(filteredDetails)
最终输出结果
运行上述代码后,你会得到期望的结果:
[ "code": 235, "school": "sp school", "students": [ ["name": "2student", "Active": true], ["name": "3student", "Active": true] ] ]
关键说明
- 使用
guard语句做安全的类型转换,避免强制解包(!)导致的运行时崩溃; filter方法简洁高效,直接遍历数组筛选符合条件的元素;- 复制原字典再更新
students字段,确保保留了原有的code、school等所有其他信息。
内容的提问来源于stack exchange,提问作者Jaykant
相关产品推荐
相关产品推荐

