swift - 如何根据内部数组值对外部数组进行排序?
问题描述
我有一个元组数组,元组包含结构数组Bill
let billDetails = [(name:String, bills:[Bill])]()
struct Bill {
var date: Date
}
内部数组bills
已按日期属性排序。现在我想根据内部数组的第一个对象的日期属性对外部数组进行排序。
如何在不强制展开的情况下做到这一点?
billDetails = billDetails.sorted(by: { $0.bills.first!.date < $1.bills.first!.date })
解决方案
bills
如果项目为空,您需要决定将项目放在哪里。实际上只有 2 个选项,将它们放在数组的开头或数组的后面。
您可以使用??
提供默认值,distantFuture
或者distantPast
取决于您希望空账单去哪里。
// empty bills last
billDetails.sort(by: { $0.bills.first?.date ?? Date.distantFuture < $1.bills.first?.date ?? Date.distantFuture })
// or empty bills first
billDetails.sort(by: { $0.bills.first?.date ?? Date.distantPast < $1.bills.first?.date ?? Date.distantPast })
推荐阅读
- mongodb - 如何访问mongoDb中的数组数组
- ubuntu - 如何从 Ubuntu 命令(Alt + F2)打开 WPS 写入、演示和电子表格应用程序
- php - .htaccess 基于referrer的重定向
- machine-learning - 使用布尔公式的分类器
- java - ehcache3 - 为什么缓存不会过期?
- php - Codeigniter:文件上传在 localhost 上工作,但不在服务器上(JSON 输入意外结束)
- spring-boot - 如何从 @Async 带注释的方法中抛出异常
- javascript - Promise.all() 比对每个 Promise 都使用 await 慢?
- java - 在 Core Java 中识别 Android 设备
- android - Ubuntu OS 中的 adb 管理器无法识别 Android 设备(已识别模拟器)