如何无循环快速从Swift结构体数组提取字符串数组?
Swift 结构体数组字段提取的高效实现
我定义了以下嵌套结构体:
struct MainContryModel{ let id: Int let ContryName: String let ActList: [MainActModel] let freAskedIds: [MainActModel] } struct MainActModel{ let id: Int let name: String let ActChapteers: [MainListModel] } struct MainListModel{ let id: Int let title: String let subList: [SubList] } struct SubList{ let title: String let description: [String] }
需要从MainContryModel类型的数组arrList中提取ContryName字段生成字符串数组,原本用循环实现:
// 注:原代码存在笔误,修正后如下 var arrStrList:[String] = [] for model in arrList{ arrStrList.append(model.ContryName) }
希望找到无需显式循环、性能更优的实现方式。
最优实现:使用map方法
Swift集合类型内置的map方法是处理这类转换的标准方案,代码简洁且性能经过官方优化,和手动循环效率相当(甚至编译器会做额外优化):
let arrStrList = arrList.map { $0.ContryName }
map会遍历数组中的每个元素,将闭包中的逻辑应用到元素上,最终返回转换后的新数组。它的底层实现本质也是循环,但属于语言层面的优化实现,无需手动管理数组初始化和元素添加,代码可读性更高。
如果是处理超大规模数据集,追求极致性能可以考虑并行处理(比如用DispatchQueue.concurrentPerform),但会增加代码复杂度,普通场景下map完全够用。
内容的提问来源于stack exchange,提问作者Er. Hiren Shiyal
相关产品推荐
相关产品推荐

