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

Swift中如何利用指定数组过滤字典数组?

简洁实现Swift数组过滤的方法

当然可以!Swift提供了几种非常清爽的方式来完成你需要的过滤任务,完全不用复杂的实现逻辑。下面给你介绍最常用的几种方案:

1. Swift原生filter方法(推荐)

这是最符合Swift风格的写法,代码简洁直观,直接用数组的filter方法就能搞定:

let items = ["test", "2test"]
var data = [Model(title: "Title", number: 1, weight: 10, text: "text1", url: "http://google.com", questRepeat: false, code: "test"), Model(title: "Title1", number: 1, weight: 10, text: "text2", url: "http://google.com", questRepeat: false, code: "1test"), Model(title: "Title2", number: 1, weight: 10, text: "text3", url: "http://google.com", questRepeat: false, code: "2test")]

// 过滤出code不在items中的Model实例
let result = data.filter { !items.contains($0.code) }

原理很简单:filter会遍历data里的每个Model,通过闭包判断它的code是否不在items数组里(!items.contains($0.code)),满足条件的元素会被自动收集到result数组中,正好就是你想要的结果。

2. 用NSPredicate实现(如果你偏好谓词方式)

如果习惯用谓词来定义过滤规则,也可以借助Foundation框架的NSPredicate来实现:

// 创建谓词:code不在items数组中
let predicate = NSPredicate(format: "NOT code IN %@", items)
// 转换为NSArray后应用谓词过滤,再转回Swift数组
let resultUsingPredicate = (data as NSArray).filtered(using: predicate) as! [Model]

这种方式需要将Swift数组转为NSArray来调用过滤方法,最后再转回[Model]类型,虽然可行,但相比原生filter少了点Swift的简洁感,适合已经熟悉谓词规则的场景。

3. 性能优化(当items数组很大时)

如果你的items数组元素很多,推荐先把它转成Set,因为Set的contains操作时间复杂度是O(1),而数组是O(n),能显著提升过滤效率:

let itemSet = Set(items)
let optimizedResult = data.filter { !itemSet.contains($0.code) }

这个优化在数据量小的时候差异不大,但数据量大的时候效果很明显,值得养成这个习惯。

内容的提问来源于stack exchange,提问作者Pavel Zaruckov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 15:07:47