Swift中获取含指定字符串的键对应值数组的最优方法
Swift 高效筛选字典中键含指定子串的条目值数组
嘿,这事儿完全不用绕弯子先提取键数组再筛选,用Swift的高阶函数链式调用就能一步搞定,代码简洁还高效!
先看核心实现,直接针对你的需求写个复用性强的函数:
// 原始字典 let originalDict: [String: String] = ["Matt":"Apple", "Calvin":"Nut", "Susie":"Pear"] // 筛选函数:键包含指定子串时返回对应值的数组 func valuesFromDict(_ dict: [String: String], whereKeyContains substring: String) -> [String] { // 先筛选出键符合条件的键值对,再提取对应的值 return dict.filter { $0.key.contains(substring) } .map { $0.value } } // 调用示例 let result = valuesFromDict(originalDict, whereKeyContains: "a") print(result) // 输出 ["Apple", "Nut"]
代码解释
filter会遍历字典的每一个键值对,只保留键包含指定子串的条目,返回一个新的筛选后的字典map紧接着把筛选后的字典里的所有值提取出来,直接组成你需要的数组
这种方式只需要遍历一次字典(底层是优化过的链式操作),比你原本想的「先提取所有键→筛选键→再根据键取值」的方式少了一次遍历,代码也更紧凑易读。
补充:大小写不敏感匹配
如果需要忽略大小写(比如输入"A"也能匹配到"Matt"里的"a"),只需要把contains换成大小写不敏感的判断方法就行:
func valuesFromDictCaseInsensitive(_ dict: [String: String], whereKeyContains substring: String) -> [String] { return dict.filter { $0.key.localizedCaseInsensitiveContains(substring) } .map { $0.value } }
这样不管输入的是大写还是小写的子串,都能正确匹配啦~
内容的提问来源于stack exchange,提问作者A O
相关产品推荐
相关产品推荐

