如何根据内部数组值对外部数组排序?

时间:2019-05-11 11:50:46

标签: swift

我有一个元组数组,元组包含结构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 })

2 个答案:

答案 0 :(得分:2)

如果bills为空,则需要确定放置项目的位置。实际上只有2个选项,可以将它们放在数组的开头或数组的后面。

您可以使用??来提供distantFuturedistantPast的默认值,具体取决于您要把空钞票放到哪里。

// 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
})