我有一个元组数组,元组包含结构Bill
的数组
let billDetails = [(name:String, bills:[Bill])]()
struct Bill {
var date: Date
}
内部数组bills
已按date属性排序。现在,我想根据内部数组的第一个对象的date属性对外部数组进行排序。
如何在不强制展开的情况下做到这一点?
billDetails = billDetails.sorted(by: { $0.bills.first!.date < $1.bills.first!.date })
答案 0 :(得分:2)
如果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 })
答案 1 :(得分:1)
以下内容如何?
billDetails = billDetails.sorted(by: { lhs, rhs in
guard !lhs.bills.isEmpty || !rhs.bills.isEmpty else {
return false
}
if !lhs.bills.isEmpty, rhs.bills.isEmpty {
return false
}
if lhs.bills.isEmpty, !rhs.bills.isEmpty {
return true
}
return lhs.bills[0].date < rhs.bills[0].date
})