Сортировка массива словарей с любым значением - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть это [[String:Any]], где у каждого элемента есть это:

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

Я бы хотел отсортировать по ключу "дата" (даты идут вверх или вниз)

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

Предоставляет ошибки, которые я не могу сравнить 2 даты.

1 Ответ

0 голосов
/ 25 ноября 2018

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 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...