[英]How to add values from one array to another?
我有兩個數組,其中一個必須完成另一個:
struct Score {
let name: String
let isComplete: Bool
let finalScore: Int
}
var scores = [
Score(name: "Steven", isComplete: false, finalScore: 12),
Score(name: "Helen", isComplete: false, finalScore: 12),
Score(name: "Adalbert", isComplete: false, finalScore: 12),
Score(name: "Christian", isComplete: false, finalScore: 12),
Score(name: "Susan", isComplete: false, finalScore: 3),
Score(name: "Julia", isComplete: false, finalScore: 13),
Score(name: "Robert", isComplete: false, finalScore: 13),
Score(name: "Mercedes", isComplete: false, finalScore: 2),
Score(name: "Gwendolin", isComplete: false, finalScore: 2),
]
struct Complete {
let name: String
let isComplete: Bool
}
var complete = [
Complete(name: "Steven", isComplete: true),
Complete(name: "Helen", isComplete: true),
Complete(name: "Mercedes", isComplete: false),
Complete(name: "Gwendolin", isComplete: true),
// Name doesn´t exist in `score` and shouldn´t show up in the result:
Complete(name: "nonexistingName", isComplete: true)
]
我怎么能用結果如下所示的方式用第二個數組中的值完成第一個數組:
let result = [
Score(name: "Steven", isComplete: true, finalScore: 12),
Score(name: "Helen", isComplete: true, finalScore: 12),
Score(name: "Adalbert", isComplete: false, finalScore: 12),
Score(name: "Christian", isComplete: false, finalScore: 12),
Score(name: "Susan", isComplete: false, finalScore: 3),
Score(name: "Julia", isComplete: false, finalScore: 13),
Score(name: "Robert", isComplete: false, finalScore: 13),
Score(name: "Mercedes", isComplete: false, finalScore: 2),
Score(name: "Gwendolin", isComplete: true, finalScore: 2),
]
通常我會發布我的嘗試草稿,但由於我很新,我不得不承認我不知道。 謝謝你的建議。
最終你應該重新思考你的模型,可能還有某種“播放器”模型,所以你沒有這種脫節。
FWIW這是一個更安全/更簡單的方法來做一個字典:
struct Score {
let name: String
var isComplete: Bool
let finalScore: Int
}
struct Complete {
let name: String
let isComplete: Bool
}
var scoresDictionary: [String : Score] = [:]
// this populates scoresDictionary with your array, keyed with the names
[ Score(name: "Steven", isComplete: false, finalScore: 12),
Score(name: "Helen", isComplete: false, finalScore: 12),
Score(name: "Adalbert", isComplete: false, finalScore: 12),
Score(name: "Christian", isComplete: false, finalScore: 12),
Score(name: "Susan", isComplete: false, finalScore: 3),
Score(name: "Julia", isComplete: false, finalScore: 13),
Score(name: "Robert", isComplete: false, finalScore: 13),
Score(name: "Mercedes", isComplete: false, finalScore: 2),
Score(name: "Gwendolin", isComplete: false, finalScore: 2),
].forEach { scoresDictionary[$0.name] = $0}
let complete = [
Complete(name: "Steven", isComplete: true),
Complete(name: "Helen", isComplete: true),
Complete(name: "Mercedes", isComplete: false),
Complete(name: "Gwendolin", isComplete: true),
// Name doesn´t exist in `score` and shouldn´t show up in the result:
Complete(name: "nonexistingName", isComplete: true)
]
//Updates only the found values in scoresDictionary
complete.forEach { scoresDictionary[$0.name]?.isComplete = $0.isComplete }
// The dictionary is updated, but in case you just want the Scores, this gives you an array
let result: [Score] = Array(scoresDictionary.values)
基本上我們只是迭代scores
,尋找匹配的Complete
。 如果我們找到一個,我們返回一個Score
,其屬性isComplete
設置為true
或false
。 如果我們找不到,我們將原始Score
保持不變。
var final: [Score] = scores.map { aScore in
let comp = complete.first { aScore.name == $0.name }
if let comp = comp {
return Score(name: aScore.name, isComplete: comp.isComplete || aScore.isComplete, finalScore: aScore.finalScore)
}
return aScore
}
final.forEach {
print($0.name, $0.isComplete, $0.finalScore)
}
打印:
Steven true 12
Helen true 12
Adalbert false 12
Christian false 12
Susan false 3
Julia false 13
Robert false 13
Mercedes false 2
Gwendolin true 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.