【问题标题】:How can I expand a Dict(string, array) in Swift 5如何在 Swift 5 中扩展字典(字符串,数组)
【发布时间】:2019-12-03 06:06:15
【问题描述】:

我可以在 Swift 5 中使用 map/reduce 将字典扩展为一对数组吗?还是必须使用 for each

let dict = ["A": ["1","2","3","4"],
            "B": ["5","6","7","8"]]

???

//result = [["A", "1"],["A", "2"],....["B", "5"],....]

【问题讨论】:

标签: swift dictionary


【解决方案1】:
let result = dict.map { (letter: String, digits: [String]) in
    return digits.map { digit in
        return [letter, digit]
    }
}.reduce([]) {
    $0 + $1
}

【讨论】:

  • reduce([]) { $0 + $1 } 可以替换为reduce([], +)。至少,你应该使用reduce(into: []) { $0 += $1) },否则你会得到二次时间复杂度,或者更好,只需使用.flatMap { $0 }
【解决方案2】:

这是最短的解决方案。

let result = dict.map { dic in
        dic.value.map { [dic.key : $0] }
    }.reduce([], +) 

【讨论】:

  • 你应该使用 reduce(into: []) { $0 += $1) },否则你会得到二次时间复杂度,甚至更好,只需使用 .flatMap { $0 }
【解决方案3】:

这是一个不需要reduce的解决方案:

let dict = ["A": ["1","2","3","4"],
            "B": ["5","6","7","8"]]
let result = dict.map { kv in kv.value.map { [kv.key, $0] } }.flatMap { $0 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多