Sep*_*miu 1 arrays dictionary swift swift2
什么是一个简单的方法来减少像AAA:111;BBB:222;333;444;CCC:555Swift中的字典一样的字符串.我有以下代码:
var str = "AAA:111;BBB:222;333;444;CCC:555"
var astr = str.componentsSeparatedByString(";").map { (element) -> [String:String] in
var elements = element.componentsSeparatedByString(":")
if elements.count < 2 {
elements.insert("N/A", atIndex: 0)
}
return [elements[0]:elements[1]]
}
Run Code Online (Sandbox Code Playgroud)
上面的代码产生一个阵列的字典:
[["A": "111"], ["BBB": "222"], ["UKW": "333"], ["UKW": "444"], ["CCC": "555"]]
我希望它能产生,
["A": "111", "BBB": "222", "UKW": "333", "UKW": "444", "CCC": "555"]
但是没有我尝试的东西,因为我map在一个数组上调用函数似乎不可能转换map函数结果的性质.
注意:字符串格式的字典被描述为具有KEY:VALUE;格式或VALUE;格式,在这种情况下,映射函数将添加"N/A"as作为未命名值的键.
非常感谢任何有关此事的帮助.
你map会产生一系列字典.当你想把它们组合成1时,这是一个完美的工作reduce:
func + <K,V>(lhs: Dictionary<K,V>, rhs: Dictionary<K,V>) -> Dictionary<K,V> {
var result = Dictionary<K,V>()
for (key, value) in lhs {
result[key] = value
}
for (key, value) in rhs {
result[key] = value
}
return result
}
var str = "AAA:111;BBB:222;333;444;CCC:555"
var astr = str
.componentsSeparatedByString(";")
.reduce([String: String]()) {
aggregate, element in
var elements = element.componentsSeparatedByString(":")
if elements.count < 2 {
elements.insert("N/A", atIndex: 0)
}
return aggregate + [elements[0]:elements[1]]
}
print(astr)
Run Code Online (Sandbox Code Playgroud)
Swift没有默认操作符来"组合"两个,Dictionaries所以你必须定义一个.请注意,+这里不是可交换的:dictA + dictB != dictB + dictA.如果两个字典中都存在密钥,则将使用第二个字典中的值.
| 归档时间: |
|
| 查看次数: |
1221 次 |
| 最近记录: |