【问题标题】:Swift Dictionary: join key and value into stringSwift Dictionary:将键和值加入字符串
【发布时间】:2016-07-11 20:00:23
【问题描述】:
我正在为此寻找最佳语法:
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
类似于数组 joinWithSeparator 的东西,使用 flatMap 或类似的东西。 (学习目的)
【问题讨论】:
标签:
swift
dictionary
syntax
【解决方案1】:
您可以映射字典中的键/值对以将它们转换为字符串数组,然后您可以使用+ 加入它们。但请记住,字典是无序的,因此这不会保留输入顺序。
let responseParameters = ["keyA" : "valueA", "keyB" : "valueB"]
let responseString = responseParameters.map{ "\($0):\($1)" }
.joinWithSeparator("+")
【解决方案2】:
字典不是有序集合,因此您必须在访问键值对的“有序版本”之前对键进行排序。例如
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
【解决方案3】:
swift 5 的更新答案:
let responseParameters = ["keyA": "valueA", "keyB": "valueB"]
let responseString = responseParameters.map { "\($0):\($1)" }
.joined(separator: "+")
【解决方案4】:
其实你可以用reducelike:?
let responseParameters = ["keyA": "valueA", "keyB": "valueB"]
let responseString = responseParameters.reduce("") { $0.isEmpty ? "\($1.key):\($1.value)" : "\($0)+\($1.key):\($1.value)" }