[英]Mapping two arrays two one object in swift
我有兩個不同的數組,它們試圖使用第一個數組ModelOne id
的信息將它們映射到一個對象。 我使用兩個 for 循環來檢查模型一中的id
是否出現在第二個數組中,如果為真,則創建一個具有模型一id
、 name
和模型二中所有名稱數組的對象。 從我的實施中無法獲得正確的結果。
// Model One
struct ModelOne: Codable {
let id: Int
let name: String
}
// Model two
struct ModelTwo: Codable {
let id: Int
let modelOneId: Int
let name: String
}
var arrayOne = [ModelOne]()
arrayOne.append(ModelOne(id: 1, name: "One"))
arrayOne.append(ModelOne(id: 2, name: "Two"))
var arrayTwo = [ModelTwo]()
arrayTwo.append(ModelTwo(id: 1, modelOneId: 1, name: "Some name"))
arrayTwo.append(ModelTwo(id: 2, modelOneId: 1, name: "Other name"))
arrayTwo.append(ModelTwo(id: 1, modelOneId: 2, name: "Name one"))
arrayTwo.append(ModelTwo(id: 2, modelOneId: 2, name: "Name two"))
struct MappedModel {
let id: Int
let name: String
let items: [String]
}
var arrayThree = [MappedModel]()
for i in arrayOne {
for x in arrayTwo {
if i.id == x.id {
arrayThree.append(MappedModel(id: i.id, name: i.name, items: [x.name]))
}
}
}
如果我正確地解釋這個問題,你想要的MappedModel
有id
和name
從ModelOne
,與items
包含所有的name
■從ModelTwo
其中modelOneId
比賽ModelOne
id
。
如果是這樣,這將解決問題:
var combined = arrayOne.map { item1 in
MappedModel(id: item1.id, name: item1.name, items: arrayTwo.compactMap { $0.id == item1.id ? $0.name : nil})
}
其中產生:
[
MappedModel(id: 1, name: "One", items: ["Some name", "Other name"]),
MappedModel(id: 2, name: "Two", items: ["Name one", "Name two"])
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.