首页 > 解决方案 > 使用任何值对字典数组进行排序

问题描述

我有这个[[String:Any]],每个元素都有这个:

["date":Date,"value":CGFloat]

我想按“日期”键排序。(日期上升或下降)

 let sortedArray = array.sort { ($0["date"] as? Date) < ($1["date"] as? Date) }

提供我无法比较 2 个日期的错误。

标签: swift

解决方案


sort正在变异,因此数组需要是var并且没有返回,并且要么强制解包要么

array.sort { ($0["date"] as! Date  ) < ($1["date"] as! Date   ) }

或者

array.sort { ($0["date"] as? Date ?? Date()  ) < ($1["date"] as? Date ?? Date() ) }

或者sorted

let sortedArray  =   array.sorted { ($0["date"] as? Date ?? Date()  ) < ($1["date"] as? Date ?? Date() ) }

强烈推荐

struct Root { 
  let date:Date 
  let value:CGFloat 
}     


var array = [Root(date: Date(), value: 12),Root(date: Date(), value: 14),Root(date: Date(), value: 15)]

 let sortedArray =   array.sorted {  $0.date < $1.date }

// or

let sortedArray = array.sorted {  $0.date.compare($1.date) == .orderedAscending }

推荐阅读