gpt4 book ai didi

arrays - 在 Swift 中将字符串缩减为字典

转载 作者:搜寻专家 更新时间:2023-11-01 05:46:43 25 4
gpt4 key购买 nike

AAA:111;BBB:222;333;444;CCC:555 之类的字符串简化为 Swift 中的字典的简单方法是什么?我有以下代码:

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]]
}


上面的代码生成一个 ArrayDictionaries:
[[“A”:“111”],[“BBB”:“222”],[“UKW”:“333”],[“UKW”:“444”],[“CCC”:“555"]]

我要它产生
[“A”:“111”,“BBB”:“222”,“UKW”:“333”,“UKW”:“444”,“CCC”:“555”]

但无论我尝试什么,因为我在 Array 上调用了 map 函数,似乎不可能转换 map 函数结果的性质。

注意:字符串格式的字典被描述为具有 KEY:VALUE; 格式或 VALUE; 格式,在这种情况下,映射函数将添加 “N/A” 作为未命名值的键。

非常感谢您对此问题的任何帮助。

最佳答案

您的 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)

Swift 没有默认运算符来“组合”两个 Dictionaries,因此您必须定义一个。请注意,此处的 + 不可交换:dictA + dictB != dictB + dictA。如果一个键在两个字典中都存在,则使用第二个字典中的值。

关于arrays - 在 Swift 中将字符串缩减为字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32877302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com