You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:23:54