首页 > 解决方案 > Swift 使用高阶函数

问题描述

我想在像 [String: [String]] 这样的字典中收集所有有城镇的城市。但是由于模型,我不能将 townNames 附加到字典中。我的模型如下所示。由于 [TownModel],我无法将 townName 作为字符串。它适用于 [String: [TownModel]] 字典。但我想使用我的 [String: [String]] 字典。我应该在我的代码中添加什么?

open class CityListResponseModel: BaseResponseProtocol {
    public var cityCode: Int?
    public var cityName: String?
    public var towns: [TownModel]?
}

open class TownModel: Codable {
    public var townCode: Int?
    public var townName: String?
}

//My code
var dictionary: [String: [String]]
let dict = list.reduce(into: [:]) { $0[$1.cityName, default: []].append($1.towns) }

标签: swiftdictionary

解决方案


首先,改进你的模型。没有理由拥有可选数组或非最终类。

(也可能没有理由cityCodecityName可选。“城市”前缀似乎也是多余的,“城镇”前缀也是如此。检查所有这些。)

final class CityListResponseModel: BaseResponseProtocol {
  public var cityCode: Int?
  public var cityName: String?
  public var towns: [TownModel]
}

接着就,随即,

Dictionary(
  list.compactMap { city in
    city.cityName.map { ($0, city.towns.compactMap(\.townName)) }
  },
  uniquingKeysWith: +
)

推荐阅读