考虑以下类
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/