簡體   English   中英

如何將值從一個數組添加到另一個數組?

[英]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設置為truefalse 如果我們找不到,我們將原始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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM