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

标签 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?
 }

给定一组 Category 对象。

var categoryList: [Category]

我想通过仅提取 ItemDetails 中的 name(以便应用过滤器)和 id 顺序来创建一个新的对象数组重建类别对象的返回数组。

因此,我必须重建 Category 对象的数组 来自新的对象数组。

如何使用 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?

    } 

最佳答案

要获得仅包含名称的数组,您可以像您提到的那样执行 map:

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

但这会保留可选值。如果您不需要可选值,请改用 compactMap

然而,重建并没有任何意义。您是否正在使用 ID 访问数据库或网络服务?这是您能够重建原始 Category 数组的唯一可能方式。为什么不保留原始数组?

关于arrays - 从另一个对象数组创建一个对象数组,稍后使用 map 重建原始对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58311480/

相关文章:

swift - 是否可以使用 SwiftUI 将键盘上的 "return"键更改为 "done"?

ios - SwiftUI:如何关闭模式表,然后一起执行导航链接

javascript - 在对象数组中添加匹配键的值

Web 服务输入中的 Java + Jersey 实体列表

arrays - Node.js 有没有办法在 JSON 响应中发送数组?

swift - 相等运算符重载未按预期工作

ios swift制作表列表不断收到关于nill的错误

arrays - 垂直跨行的数组元素的 MIN/MAX

c - 如何定义和初始化结构体内部的字符串数组?

swift - DispatchGroup 会永远等待吗?