swift - 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) }
解决方案
首先,改进你的模型。没有理由拥有可选数组或非最终类。
(也可能没有理由cityCode
或cityName
可选。“城市”前缀似乎也是多余的,“城镇”前缀也是如此。检查所有这些。)
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: +
)
推荐阅读
- jquery - 选择最后一个非只读输入jQuery
- docker - docker run -v 即使没有 VOLUME 或 mkdir 也能工作
- angular - 用户登录后如何将默认路由从组件更改为另一个组件?
- java - 使用 Optional.ofNullable 作为三元运算符的替代品是一种好习惯吗?
- debugging - 如何逐步完成从主 vb6.exe 调用的第二个 vb6.exe
- c# - 使用 OpenXML 在 power point 演示文稿中突出显示文本?
- javascript - HTTPServletResponse 方法 setStatus()
- libgdx - 对 Inputlistener LIBGDX 感到困惑
- c# - 如何在多个航点之间移动相机?
- javascript - 图标未显示在实现中,但显示在演示中