我有一个字典,其中包含键和项模型的值。
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)
}
With:
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)
的想法:遍历所需的键(并保证顺序),为每个键构造itemsid列表,由","然后加上键。最后,加入了这一切。
附加问题:为什么name
和itemId
是可选的?这正常吗?
网站说明:给出第一部分(容易重复的输入)可以增加答案的变化,所以我们不必重新创建自己的假数据来检查我们的答案。
试试这个:键的顺序可以不同,因为它是字典,而顺序在字典
中并不重要。print(
yourDict.map { (key, values) -> String in
"(key): (values.compactMap { $0.itemId }.joined(separator: ","))"
}.joined(separator: ";")
)