проблема со словарем swift, когда его нужно упорядочить по ключу

#swift #ordereddictionary

Вопрос:

У меня есть проблема, когда я могу сортировать словарь, однако результат странный.

 
  class MyModel {
     var dict = [Date: Int]()
    ...
  }
  let sortDict = dict.sorted { (first, second) -> Bool in
      return first.key > second.key
    }
    dictDatePlacesCount = sortDict[0]
 

Проблема в том, что я получаю синтаксическую ошибку

 Cannot assign value of type 'Dictionary<Date, Int>.Element' (aka '(key: Date, value: Int)') to type '[Date : Int]'
 

Вопрос в том, что я не могу создать пользовательский словарь с этим правилом сортировки в порядке убывания по дате?

Я исследовал и нашел OrderedDictionary, но это похоже на внешний пакет?

Комментарии:

1. похоже, что dictDatePlacesCount это объявлено как словарь [Date: Int] , а не как элемент словаря (пара значений ключа) (Date, Int)

2. Да, OrderedDictionary это из внешнего пакета под названием Swift Collections. Вы определенно должны использовать что-то подобное, если вы действительно хотите Dictionary получить тип результата. sorted Функция , которую вы пытаетесь вызвать прямо сейчас, не возвращает a Dictionary , она возвращает an Array с кортежем, представляющим keys и values : developer.apple.com/documentation/swift/dictionary/…

Ответ №1:

Как говорит jnpdx, метод словаря sorted() возвращает массив кортежей типа (Key, Value) (так (Date, Int) в вашем случае).

В стандартной библиотеке Swift нет упорядоченного словаря. Опять же, как упоминал jnpx, существуют фреймворки/библиотеки, такие как официальные коллекции Swift, которые предлагают упорядоченные словари. Возможно, вы захотите использовать один из них.

В качестве альтернативы вы можете отсортировать ключи из своего словаря и использовать их для индексирования содержимого.

Комментарии:

1. Справедливости ради, Swift Collections на самом деле не является «третьей стороной». Это «плацдарм для stdlib». Это не дает всех обещаний ABI stdlib, но это не просто какой-то случайный код на GitHub.

2. Я немного отредактирую формулировку, потому что утверждение «В Swift нет такого понятия, как сортированный словарь», неверно, как указано, потому что официальные коллекции Swift pacakge, безусловно, считаются «в swift».

3. Лучший выбор слов. Спасибо.