swift - 将 Swift 3 函数转换为 Swift 4
问题描述
我正在努力将此功能转换为 Swift 4
func buildIndex(records: [Record]) -> [[Record]] {
var g = [NSDate: [Record]]()
for e in records {
if (g[e.time] == nil) {
g[e.time] = []
}
g[e.time]!.append(e) // grouping by `time`
}
return sorted(g.keys) { (a: NSDate, b: NSDate) in
a.compare(b) == .OrderedAscending // sorting the outer array by time
}
// sorting the inner arrays by `name`
.map { sorted(g[$0]!) { $0.name < $1.name } }
}
我希望有一个人可以帮助我。
解决方案
这里有很多东西要清理。变量名显然是一场灾难,但强制展开也是如此。所有这些都可以用一个简单的调用来代替Dictionary.init(grouping:by:)
import Foundation
struct Record {
let time: Date
let name: String
}
func buildIndex(records: [Record]) -> Any {
return Dictionary(grouping: records, by: { $0.time })
.mapValues { $0.sorted { $0.name < $1.name} }
.sorted { (pair1, pair2) in pair1.key < pair2.key }
}
推荐阅读
- javascript - 输入文件过滤允许加载多页pdf
- javascript - 如何使用类和函数为 html5-canvas 上的多个对象设置动画?
- scala - 优化 Flink 转换
- javascript - 在 javascript 中导入文件总是在路径前面添加 localhost
- jmeter - JMeter 负载测试异步 api
- amazon-web-services - 如何在 NodeJS 中使用 AWS SES 发送附件?
- xamarin.forms - 从点数组中检索签名
- opencart - 我如何在 opencart 文件中搜索代码行以在类别页面 OpenCart 2.3 中更改网格视图
- java - Selenium - 单独通过,TestSuite 没有
- python-requests - 在 Python 请求库的 Header 中使用 JSON