如何用Swift实现函数提取符合指定条件的人员姓名?
问题实现方案
给定数据源
let teachersInfo: [[String]] = [ ["names", "comments"], ["Ian", ",scientist,male, no_available"], ["Mark", "teacher,elementary school,female, available_for_new"], ["Bryan", "interior designer,male,no_available"], ["Tomas", "profesional surfer,master"], ["Justine", "no_available, scientist"], ["Malek", "teacher, elementary school, available_for_new"], ["Adrian", "scientist, profesional surfer, available_for_new"], ["Mike", "elementary schoole,male,no_available"] ]
需求说明
- 返回所有属于**职业冲浪者(profesional surfer)**的人员姓名
- 返回所有既是**教师(teacher)且标记为可承接新任务(available_for_new)**的人员姓名
实现代码
1. 获取所有职业冲浪者姓名
func findProfessionalSurfers() -> [String] { // 跳过表头行,遍历所有数据行 return teachersInfo.dropFirst().compactMap { row in guard row.count >= 2 else { return nil } let name = row[0] let comments = row[1] // 分割评论字段并去除每个标签的前后空格,避免空格导致匹配失败 let skillTags = comments.components(separatedBy: ",").map { $0.trimmingCharacters(in: .whitespaces) } // 判断是否包含目标标签 if skillTags.contains("profesional surfer") { return name } return nil } }
调用该函数返回结果:["Tomas", "Adrian"]
2. 获取符合条件的教师姓名
func findAvailableTeachers() -> [String] { return teachersInfo.dropFirst().compactMap { row in guard row.count >= 2 else { return nil } let name = row[0] let comments = row[1] let tags = comments.components(separatedBy: ",").map { $0.trimmingCharacters(in: .whitespaces) } // 同时满足两个标签匹配条件 if tags.contains("teacher") && tags.contains("available_for_new") { return name } return nil } }
调用该函数返回结果:["Mark", "Malek"]
补充说明
- 处理评论字段时,先按逗号分割再去除前后空格,是为了兼容数据中存在的空格差异(比如
" available_for_new"和"available_for_new") - 代码中保留了原数据的拼写规则(比如
profesional未修正为professional),确保匹配逻辑与数据源完全对应
内容的提问来源于stack exchange,提问作者ZeroCooL
相关产品推荐
相关产品推荐

