Сортировать словарь по значению в swift - PullRequest
0 голосов
/ 25 мая 2020

У меня словарь как [String: [String]]. Данные выглядят так:

Province
  |- State 1
  |    |- A
  |    |- C
  |    |- E
  |- State 2
       |- B
       |- A
       |- D

Я пытался отсортировать это как

let sortedResult = plistData.sorted{ $0.key < $1.key }.map { [$0.key: $0.value.sorted()] }

Но это дает мне массив типов [[String : [String]]]. Как я могу исправить это, чтобы получить [String: [String]].? Необходимо отсортировать по всем значениям

Ответы [ 2 ]

1 голос
/ 25 мая 2020

В комментариях вы указали, что хотите отсортировать массивы значений. Вы можете выполнить sh это, используя mapValues и sorted следующим образом:

let sortedResult = plistdata.mapValues { $0.sorted() }

Примечание: словари в Swift неупорядочены (не имеют определенного порядка), поэтому невозможно поместить ключи в указанный c заказ. Если вы хотите отображать ключи в определенном порядке сортировки c, тогда отсортируйте их в отдельный массив, используя let sortedKeys = plistdata.keys.sorted().

0 голосов
/ 25 мая 2020

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

let dictionary = [String: [String]]()
print(dictionary.keys.sorted())
for key in dictionary.keys.sorted() {
    print(dictionary[key]?.sorted())
}

Изменить: я видел, как вы упоминали в комментариях об изменении требований. Если вы хотите только отсортировать значение, вот как:

let dictionary = [String: [String]]()
let sortedDictionary = dictionary.mapValues { $0.sorted() }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...