从另一个对象数组创建一个对象数组,并稍后使用map重建原始对象数组

时间:2019-10-09 20:02:12

标签: arrays swift

请考虑以下课程

class Category {
       var tag: String?
       var itemList: [Item]?
 }

 class Item {
       var id: Int?
       var type: String?
       var itemDetails: ItemDetails?  
 }

 class ItemDetails {
       var description: String?
       var name: String?
       var price: Float?
 }

给出一个类别对象的数组。

var categoryList: [Category]

我想通过仅提取 ItemDetails 中的名称(以应用过滤器)和 id 顺序来创建新的对象数组重建类别对象的后阵列。

因此,我必须重建类别对象的数组 从新对象数组开始。

如何使用map功能进行提取和重建?

以下是其他数据源的示例:

数据源1:

var categoryList: [Category],其中需要提取name

数据源2:

var searchList = [SearchItem],要在其中提取标题。

    Class SearchItem {
         var id: Int?
         var details: SearchItemDetails?
         var type: String? 
    }

    Class  SearchItemDetails {
              
        var description: String?
        var title: String? 
    }

数据源3

var products: [Products],要在其中提取标题。

    Class Products {
        var id: Int?
        var details: ProductDetails?
        var type: String?

    }

    class ProductDetails {
        var description: String?
        var title: String?

    } 

1 个答案:

答案 0 :(得分:1)

要获取仅包含名称的数组,请像您提到的那样执行map

let categories: [Category] = ... // this already exists
let itemNames = categories.map { $0.itemList?.map({ $0.itemDetails?.name }) }

但这将保留可选内容。如果您不想使用可选的选项,请改用compactMap

但是,重建实际上没有任何意义。您是否正在使用ID来访问数据库或网络服务?这是您能够重构Category s原始数组的唯一可能方法。为什么不只保留原始数组呢?