代码之家  ›  专栏  ›  技术社区  ›  Curnelious

对具有任意值的字典数组进行排序

  •  1
  • Curnelious  · 技术社区  · 7 年前

    [[String:Any]]

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

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

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

    提供了无法比较两个日期的错误。

    1 回复  |  直到 7 年前
        1
  •  5
  •   Shehata Gamal    7 年前

    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 }