Сортировка словаря типа [Строка: [Строка: Любая]] по значению - PullRequest
0 голосов
/ 05 апреля 2019

Я работаю над проектом IOS, который получает данные из Google Firebase Firestore.

У меня есть такие документы в Firestore:

  • 5lTSobXhcQBR2oG95s5q

    • Название: "ABC"
    • Метка времени: 1554374528.641053
  • FEeIAlAPlcrVvvtSKn8D

    • Название: "XYZ"
    • Метка времени: 1554443702.1300058

В моем проекте IOS у меня есть словарь, подобный этому:

myDictionary: [String: [String: Any]] = [5lTSobXhcQBR2oG95s5q: ["Title": "ABC", "Timestamp": 1554374528.641053], FEeIAlAPlcrVvvtSKn8D: ["Title": "XYZ", "Timestamp": 1554443702.1300058]]

Как мне отсортировать словарьпо метке времени?

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

Если вы в порядке с возвратом массива кортежей, вы можете применить sorted() с закрытием

let sortedTuples = myDictionary.sorted() { 
    if let t1 = $0.value["Timestamp"] as? Double, let t2 = $1.value["Timestamp"] as? Double {
        return t1 < t2
    }
    return true
}

Обратите внимание, что по умолчанию я возвращаю true, если любое из значений не может быть приведено к удвоенному значению или не существует. Конечно, может быть реализована более продвинутая логика в зависимости от того, какой из двух элементов выйдет из строя.

0 голосов
/ 05 апреля 2019

Каждая коллекция в iOS или swift имеет функцию сортировки. Например:

let sortedArray = dictionary.sort() { return $0.timestamp < $1.timestamp }

$ 0 будет ссылаться на «первый» элемент, а $ 1 - на элемент после первого.

В вашем примере логика та же. Я бы сделал это так: Извлеките данные временной метки и сохраните их в дополнительном словаре с идентификатором в качестве ключа и значением в качестве временной метки. Затем я использовал бы функцию .sort для сортировки этих элементов в своем словаре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...