[英]Convert nested dictionary to create String Swift
我有一个字典,其中包含键和项 model 的值。
var selectedDic: [String: [Item]] = [:]
price
和publisher
是键, itemId
是值。 我需要这个字符串: price:10-25;publisher:576,925,1737
字典打印:
[
"price": [
Babil.Item(name: Optional("10 - 25"),
itemId: Optional("10-25"))
],
"publisher": [
Babil.Item(name: Optional("ABCD"),
itemId: Optional("576")),
Babil.Item(name: Optional("DEFG"),
itemId: Optional("925")),
Babil.Item(name: Optional("HIJK"),
itemId: Optional("1737"),
)
]
]
我的代码:
var itemString: [String: String] = [:]
var str: [String] = []
for (key, value) in selectedDic {
value.forEach { a in
if str.firstIndex(of: key) == nil {
str.append(a.itemId!)
}
}
let final = str.joined(separator: ",")
itemString.updateValue(final, forKey: key)
}
和:
struct Item {
let name: String?
let itemId: String?
}
let dict: [String: [Item]] = ["price": [Item(name: "10-25", itemId: "10-25")],
"publisher": [Item(name: "ABCD", itemId: "576"),
Item(name: "DEFG", itemId: "925"),
Item(name: "HIJK", itemId: "1737")]]
你可以使用:
var keys = ["price", "publisher"]
let reduced = keys.reduce(into: [String]()) { result, current in
guard let items = dict[current] else { return }
let itemsStr = items.compactMap {$0.itemId }.joined(separator: ",")
result.append("\(current):\(itemsStr)")
}
let finalStr = reduced.joined(separator: ";")
print(finalStr)
想法:遍历所需的键(并保证顺序),为每个键构建由“,”连接的 itemsIds 列表,然后使用该键构建 append。 最后,加入了这一切。
附加问题:为什么name
和itemId
是可选的? 这正常吗?
站点注释:给出第一部分(易于重现的输入)可以增加答案的变化,因此我们不必重新创建自己的假数据来检查我们的答案。
试试这个:键的顺序可以不同,因为它是一个字典并且顺序在字典中并不重要
print(
yourDict.map { (key, values) -> String in
"\(key): \(values.compactMap { $0.itemId }.joined(separator: ","))"
}.joined(separator: ";")
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.