arrays - 如何将值从一个数组添加到另一个数组?

标签 arrays swift

我有两个数组,其中一个必须补全另一个:

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),
]

通常我会发布我的尝试草稿,但由于我对 swift 还很陌生,所以我不得不承认我不知道。感谢您的任何建议。

最佳答案

最终,您可能应该重新考虑您的模型,可能使用某种“玩家”模型,这样您就不会出现这种脱节。

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)

关于arrays - 如何将值从一个数组添加到另一个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44768762/

相关文章:

ios - 使用 IBInspectable 在 UITextField 上禁用剪切、复制、粘贴

ios - 关闭模态视图 Controller 在(iOS13.5 Xcode 11.5)中显示黑屏

Java:获取满足条件的数组的子集

javascript - 从 JSON 数组中拼接或删除元素列表,仅删除偶数项而不是匹配项

ios - 如何在从 2 个不同 API 获取数据的 UITableView 中显示数据

swift - 如何在 Swift 中编写翻转方法?

ios - 是否可以在 Swift 中使用 JTAppleCalendar 设置开始日期和结束日期?

arrays - 高效的数据结构,用于包含插入的非常长的字符数组

c - C 中数组的最大大小是多少?

ruby-on-rails - Ruby 从数组中计算总和