Swift:如何用单行代码提取集合嵌套子元素生成去重字符串Set
问题原因
原有写法存在两个问题:
- 使用
map遍历classes会保留和原数组等长的嵌套结构,无法把所有Field的type合并为一维集合 reduce的初始值为空数组时,$0 + $1.value.type会触发Swift的隐式类型推断,将String识别为[Character]序列做拼接,最终得到嵌套的字符数组
正确单行实现
要得到去重的String类型Set,写法如下:
let result = Set(classes.flatMap { $0.field.values.map(\.type) })
如果需要转为数组格式,外层套一层Array()即可:
let resultArray = Array(Set(classes.flatMap { $0.field.values.map(\.type) }))
逻辑说明
flatMap遍历所有Class实例,将每个实例field字典中的所有Field值拍平到一维数组map(\.type)批量取出所有Field的type属性值- 用
Set初始化自动完成去重,得到最终结果
内容的提问来源于stack exchange,提问作者Dannis Case
相关产品推荐
相关产品推荐

