Сортировка словаря по ключу

#json #swift #dictionary

#json #swift #словарь

Вопрос:

Я пытаюсь создать запрос параметра со словарем значений нескольких ключей, и он отлично работает. Но каждый раз словарь создается в случайном порядке ключ — значение. Как сортировать или упорядочивать по ключам словаря. Пример :

     [
      "mbappdetails": [
"locationdtls": [
          "ipAdress": "100.105.100.6",
          "locationDtl": "NaviMumbai,Maharashtra",
          "longdtl": "73.0152077",
          "latdtl": "19.1112212"
        ],
        "appdtls": [
          "appregflg": "00",
          "appid": "com.mmcompany.nstapp",
          "applversion": "1.0.70",
          "pushnkey": "cVCzsSyxCLr4l5JPElHWLDiNuoQJcbFmRlN5LFWZM9hN5lYYZnJy_4Kvvu2_fAjBXhGxbKpt"
        ],
        "devicedtls": [
          "deviceserial": "ExtEYNBSO8D85KR7DCEIOSHH",
          "devicemodel": "iPod Touch 6",
          "os": "iOS",
          "simflag": "N",
          "devicesdkversion": "12.10",
          "deviceproduct": "iPod Touch 6",
          "deviceid": "XXXXX-A2F5-XXXX-8EAC-XXXXX",
          "devicemake": "iPod touch",
          "rootflg": "N",
          "devicebrand": "APPLE",
          "osVersion": "12.1.4"
        ],
        "channelid": "XXXXXXRRRRRR"
      ],
      "token": "myToken",
      "signcs": "encrypted_dictionary_key_values_with_signature_key"
    ]
 

Порядок должен быть: channelid, appdtls, devicedtls, locationdtls, token, signcs

Вывод должен быть ТОЛЬКО в словаре.

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

1. Почему вы хотите его отсортировать?

2. Словари Swift не сортируются. Почему порядок имеет значение?

3. @RakeshaShastri Привет, я пытаюсь отсортировать словарь по именам ключей. Например [«Имя»: «Рахул»,»Возраст»: «26», «Местоположение»: «Мумбаи», «AppName»: «nsdApp»]

4. Вопрос в том, почему? вы хотите, чтобы он был отсортирован. Не как? :’D.

5. Во-первых, это недостаток в коде сервера. Во-вторых, вы неправильно понимаете представление JSON и словарь Swift. Это не должно иметь значения в вашей собственной части, это просто когда вы преобразуете свой словарь или свою структуру обратно в JSON.

Ответ №1:

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

 let dictionary = [
    "A" : [1],
    "Z" : [3],
    "C" : [2]
]

let keysSorted = Array(dictionary.keys).sorted(<)
 

Затем вы можете выполнить итерацию по отсортированному массиву и искать значения словаря по ключам. Надеюсь, это поможет!

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

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

Ответ №2:

Вы не добавили никакого кода, поэтому можете попробовать следующее: (Вы можете изменить знак в соответствии с вашими требованиями. в каком порядке отправки или убывания вы хотите)

 let sortedDict = YourDictionary.sorted(by: {$0.0 > $1.0})
 

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

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

1. let sortedDict = dict.sorted {$0.key > $1.key}

2. Что вы подразумеваете под словарем вывода? Словарь представляет собой неупорядоченную коллекцию

3. @LeoDabus Один парень ответил на мой вопрос и его в массиве. Да, я знаю, и мне нужна помощь.

4. @user10959828 теперь ваша строка не является допустимым json

5. @LeoDabus Не JSON, братан, это словарь 🙂

Ответ №3:

Попробуйте следующий код.

     var dict = ["name" : "Test", "user" : "Users" ]
    dict = [String : String](uniqueKeysWithValues: dict.sorted{ $0.key < $1.key 
    })
 

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

1. Я хочу, чтобы, если ключ = «пользователь» —- Его порядок должен быть 1-м, если ключ = «имя» — 2-й, как этот порядок с условием.