Swift 字典:将键和值合并成字符串

9
我正在寻找这个的最佳语法:

我正在寻找一个最佳的语法:

        let responseParameters = ["keyA" : "valueA", "keyB" : "valueB"]
        var responseString = ""
        for (key, value) in responseParameters {
            responseString += "\(key):\(value)"
            if Array(responseParameters.keys).last != key {
                responseString += "+"
            }
        }
        //responseString: keyA:valueA+keyB:valueB

类似于使用flatMap进行数组连接,或者使用类似的方法。 (学习目的)

4个回答

19
你可以在字典中映射键值对以将它们转换为字符串数组,然后用+连接这些字符串。但请记住,字典是无序的,因此它不会保留输入顺序。
let responseParameters = ["keyA" : "valueA", "keyB" : "valueB"]

let responseString = responseParameters.map{ "\($0):\($1)" }
                                       .joined(separator: "+")

5

字典不是有序集合,因此您需要在访问“有序版本”的键-值对之前对键进行排序。例如:

let responseParameters = ["keyA" : "valueA", "keyB" : "valueB", "keyC" : "valueC"]

let responseString = responseParameters
    .sort { $0.0 < $1.0 }
    .map { $0 + ":" + $1 }
    .joinWithSeparator("+")

print(responseString) // keyA:valueA+keyB:valueB+keyC:valueC

4

以下是适用于Swift 5的更新答案:

let responseParameters = ["keyA": "valueA", "keyB": "valueB"]
let responseString = responseParameters.map { "\($0):\($1)" }
                                   .joined(separator: "+")

1
实际上,您可以像这样使用reduce:

let responseParameters = ["keyA": "valueA", "keyB": "valueB"]

let responseString = responseParameters.reduce("") { $0.isEmpty ? "\($1.key):\($1.value)" : "\($0)+\($1.key):\($1.value)" }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接