繁体   English   中英

转换嵌套字典以创建字符串 Swift

[英]Convert nested dictionary to create String Swift

我有一个字典,其中包含键和项 model 的值。

var selectedDic: [String: [Item]] = [:]

  • 实际上,我正在尝试使用字典键创建一个字符串,并且键具有多个用逗号分隔的值。
  • 如果我向键添加更多值,它应该向特定键添加值。
  • pricepublisher是键, 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。 最后,加入了这一切。

附加问题:为什么nameitemId是可选的? 这正常吗?

站点注释:给出第一部分(易于重现的输入)可以增加答案的变化,因此我们不必重新创建自己的假数据来检查我们的答案。

试试这个:键的顺序可以不同,因为它是一个字典并且顺序在字典中并不重要

print(
    yourDict.map { (key, values) -> String in
        "\(key): \(values.compactMap { $0.itemId }.joined(separator: ","))"
    }.joined(separator: ";") 
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM