Сортировать словарь по значению даты - Swift - PullRequest
0 голосов
/ 14 июля 2020

Итак, мне нужно иметь возможность отсортировать мой словарь по значению «дата» (от самого нового к самому старому)

Мой словарь отформатирован так, что есть несколько человек со значениями: дата (дата создания) , имя и электронная почта. Массив (народы):

let bob =   ["name": "Bob", "date": Date(timeIntervalSince1970: 1594756208.777499), "email": "bob@gmail.com"] as [String : Any]
let steve = ["name": "Steve", "date": Date(timeIntervalSince1970: 1604756208.777499), "email": "steve@gmail.com"] as [String : Any]
let sammy = ["name": "Sammy", "date": Date(timeIntervalSince1970: 1594756210.778510), "email": "sammy@gmail.com"] as [String : Any]
let peoples = [bob, steve, sammy}

С этим массивом я пытался отсортировать его так:

let peoplesSorted = peoples.sorted(by: { 0$.date > 1$.date })

Но он не работает и выдает ошибку «Двоичный оператор»> 'нельзя применить к двум' Дата? ' операнды "

Я также попытался отформатировать дату в строку (yyyy / MM / dd HH: mm: ss), но мне не удалось понять код в функции sorted ().

Спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Как сказал Вадиан, у вас есть словарь типа [String: Any]. Вы не можете использовать точечную нотацию в словарях, а также не можете сравнивать объекты типа Any.

Принимая предложение Вадиана, ваш код станет чище, если вы реорганизуете свой словарь как структуру: *

1 голос
/ 14 июля 2020

Сообщение об ошибке не соответствует коду. Помимо опечаток вы должны получить

Неоднозначное использование оператора '>'

Any - это безразлично тип, но компилятор должен знать тип stati c при применении операторов.

И стандартные словари не поддерживают точечную нотацию

let peoplesSorted = peoples.sorted(by: { ($0["date"] as! Date) > $1["date"] as! Date })

Лучшим типом является настраиваемая структура, которая поддерживает точечную нотацию и сильную типы.

...