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

Swift中如何简化结构体数组的部分匹配过滤逻辑?

Swift中如何简化结构体数组的部分匹配过滤逻辑?

嘿,这个场景我太熟了!你现在手动枚举所有带"Red"的颜色名,确实在变体多了之后会越写越繁琐,还容易漏加新的变体。其实咱们换个思路就行——直接检查每个颜色名称是否包含"Red"这个子串,不用一个个列出来!

看你原来的过滤条件,核心是要找「数字包含1,且名字里有任意一个带Red的颜色」,那我们可以把名字的判断逻辑改成:只要names数组里有任意一个字符串包含"Red",就算满足条件。修改后的代码是这样的:

let filteredColors = colors.filter { color in
    color.numbers.contains(1) &&
    // 这里换成检查每个name是否包含"Red"子串
    color.names.contains { $0.contains("Red") }
}

这样改了之后,不管以后新增多少种Red的变体(比如"Bright Red"、"Deep Red"、"Muted Red"啥的),这个过滤逻辑都能自动匹配,再也不用手动去加新的contains("XXX Red")判断了,维护起来轻松太多!

而且你可以放心,这个逻辑和你原来的代码结果完全一致——原来符合条件的["Red"]和["Light Red"]都会被匹配到,因为它们的名字里都包含"Red"子串。

如果以后遇到大小写不统一的情况(比如有小写的"red"或者全大写的"RED"),还可以改成不区分大小写的匹配:

color.names.contains { $0.localizedCaseInsensitiveContains("Red") }

这样就更灵活啦~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 12:08:02