swift - 如何在 Swift 中展平嵌套对象数组?
问题描述
我是 Swift 语言的新手,我正在努力寻找一个如何将嵌套对象数组展平/组合成单个数组的示例。例如,以 JSON 为例,我想转换
[
{
name: 'Steve Maddon',
shoes: [
{ type: 'Jimmy Choo' },
{ type: 'Louix Crouton' }
]
},
{
name: 'Bobby Brown',
shoes: [
{ type: 'Adidas' },
{ type: 'Reebok' }
]
},
]
至
[
{
name: 'Steve Maddon',
shoeType: 'Jimmy Choo'
},
{
name: 'Steve Maddon',
shoeType: 'Louix Crouton'
},
{
name: 'Bobby Brown',
shoeType: 'Adidas'
},
{
name: 'Bobby Brown',
shoeType: 'Reebok'
}
]
我使用以下类和对象对此进行了建模:
class Shoe {
let type: String
init(type: String) {
self.type = type
}
}
class Person {
let name: String
let shoes: [Shoe]
init(name: String, shoes: [Shoe]) {
self.name = name
self.shoes = shoes
}
}
let people = [
Person(name: "Steve Maddon", shoes: [
Shoe(type: "Jimmy Choo"),
Shoe(type: "Louix Crouton"),
]),
Person(name: "Bobby Brown", shoes: [
Shoe(type: "Adidas"),
Shoe(type: "Reebok"),
])
]
我想将这些对象展平到这个数据结构中:
class PersonWithShoeType {
let name: String
let shoeType: String
init(name: String, showType: String) {
self.name = name
self.shoeType = shoeType
}
}
我确定这flatMap
是我需要的函数,但许多示例仅在简单数组上运行。我怎样才能做到这一点?
解决方案
这可以使用以下方法来实现:
class PersonWithShoeType {
let name: String
let shoeType: String
init(name: String, showType: String) {
self.name = name
self.shoeType = shoeType
}
}
let people = [
Person(name: "Steve Maddon", shoes: [
Shoe(type: "Jimmy Choo"),
Shoe(type: "Louix Crouton"),
]),
Person(name: "Bobby Brown", shoes: [
Shoe(type: "Adidas"),
Shoe(type: "Reebok"),
])
]
let personWithShoes = people.flatMap({ person in
person.shoes.map({ shoe in
PersonWithShoeType(name: person.name, shoeType: shoe.type)
})
})
自我注意:RTFM优先
推荐阅读
- python - 在 Jupyter 中以颜色打印 f 字符串,并在混合中使用转义字符
- python - 为什么我的 Python pygame 程序在启动后立即关闭?
- java - 如何插入Java字符串数组,如何正确查找索引,isAvailable布尔方法,项目频率
- javascript - 如何修复路由加载前一个视图以及当前视图下方的 UI 路由
- python - 插值经度和纬度坐标的数据系列 - 输入数据中的错误
- jenkins - 我可以并行运行 jenkins 高级阶段吗?
- mysql - SQL Sum 布尔值并添加汇总行
- javascript - 防止覆盖 JavaScript 函数/方法以打开页面
- c++ - C、C++ 和 Fortran 中浮点收缩的推荐设置
- mongodb - 即使似乎满足所有条件, deleteone() 也不起作用