Являются ли ключи и значения в NSDictionary заказаны?

Я имею в виду: Является ли порядок ключей и значений в NSDictionary всегда одинаковым, как то, как они были указаны при инициализации NSDictionary? Или мне лучше поддерживать отдельный NSArray, если мне действительно нужно знать порядок ключей?

Нет, они не заказаны. Пока вы не добавляете или не удаляете какие-либо элементы из словаря, они останутся в том же порядке, но как только вы добавите или удалите элемент, новый порядок будет совершенно другим.

Если вам нужны ключи / значения, которые нужно заказать, используйте NSArray (или некоторую другую упорядоченную структуру данных).

Клавиши и значения NSDictionary не упорядочены. Ваши варианты:

  • Поддерживайте отдельный массив ключей в желаемом порядке.
  • Напишите или найдите существующий class, который является оберткой для вышеуказанного
  • Напишите или найдите существующий подclass NSDictionary, который добавляет API для заказа

Matt Gallagher написал запись в блоге под названием «OrderedDictionary: подclassификация кластера classов Cocoa», охватывающий именно эту проблему, в комплекте с примером кода.

NSDictionary, в соответствии с рекомендацией Apple , в основном представляет собой оболочку вокруг хеш-таблицы. Так что нет, они не гарантированы в каком-либо конкретном порядке.

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

Вам нужно будет сделать это, предварительно прочитав ключи в массиве и, конечно же, отсортировав массив.

Фактически, вы даже не можете полагаться на то, что при запуске программы на двух разных устройствах одинаково одинаково, даже если это точно такая же программа и точно такая же версия операционной системы.

Например, если вы запускаете программу на iPad Air, упорядочение элементов внутри NSDictionary может отличаться от того, что при запуске одной и той же программы на iPad Retina, даже если версия iOS точно такая же.

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

  • Как я могу добавить объекты CGPoint в NSArray простым способом?
  • Просмотр controllerов: как программно переключаться между представлениями?
  • Есть ли способ удалить разделительную линию из UITableView?
  • UITableView didSelectRowAtIndexPath: не вызывается при первом нажатии
  • Как захватить UIView в UIImage без потери качества на дисплее сетчатки
  • Клавиатура iMessage Receding в приложении iOS
  • Преимущества, проблемы, примеры добавления другого UIWindow в приложение iOS?
  • Как определить размер шрифта UILabel, когда -adjustsFontSizeToFitWidth установлен на YES?
  • Изменение цвета фона в UIAlertView?
  • Как я могу получить точное время, например, в миллисекундах в Objective-C?
  • Есть ли хорошие полезные учебные пособия UIScrollView в сети?
  • Interesting Posts

    Может ли один исполняемый файл быть консольным и графическим приложением?

    val () не вызывает change () в jQuery

    Лучший интерфейс SVN для Linux?

    Как вставить без перезаписи

    Как создать виртуальное аудиоустройство и поток аудио вход с ним

    Android – нижний колонтитул прокручивается с экрана при использовании в CoordinatorLayout

    Считать количество слов в ArrayList

    Печенье домена для субдомена

    Github для Mac устанавливает веб-сервер, «github conduit». Это риск для безопасности?

    Как пакетный файл запускает программу и задает положение и размер windows?

    Как определить пользовательские разделы web.config с потенциальными дочерними элементами и атрибутами свойств?

    jQuery serialize не регистрирует флажки

    Пост-инкремент и предварительный инкремент в цикле «for» производят одинаковый вывод

    Ffmpeg: чрезвычайно точное извлечение видеосегментов

    Я рискую уничтожить вентилятор, если я использую пылесос на моем ноутбуке?

    Давайте будем гением компьютера.