swift - 使用任何值对字典数组进行排序
问题描述
我有这个[[String:Any]]
,每个元素都有这个:
["date":Date,"value":CGFloat]
我想按“日期”键排序。(日期上升或下降)
let sortedArray = array.sort { ($0["date"] as? Date) < ($1["date"] as? Date) }
提供我无法比较 2 个日期的错误。
解决方案
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 }
推荐阅读
- json - built_value 如何将 json 数组反序列化为对象数组?
- unit-testing - Visual Studio 2017 中的 XUnit 测试和实时单元测试
- php - 如何在循环数组中计算或获取汇总值?
- c# - Selenium chrome 驱动程序以无头打开网站 c#
- c++ - 模板元编程三元值未达到基本情况
- ios - Firebase ServerValue.timestamp() 在 firebase 数据库中不断变化
- javascript - 在滚动条出现之前确定屏幕上可见的表格行数
- javascript - 将包含文件和字符串值的对象附加到 FormData - JS
- visual-studio - 使用 Nsight 进行调试时无法在着色器中插入断点
- ios - 如何在 UITableView 中基于行输入(字母)添加另一个部分 - swift