Является ли словарь Objective-C упорядоченным контейнером? - PullRequest
12 голосов
/ 30 октября 2009

в качестве заголовка, когда я вставляю элемент в словарь в target-c (в порядке, подобном: k1, k2, k3), есть ли гарантия, что когда я перечислю его, например:

for ( k in dictionary ){
   // output the k - value
}

будет показываться в том же порядке?

Ответы [ 5 ]

21 голосов
/ 30 октября 2009

Нет, NSDictionary не поддерживает порядок вставки своих ключей.

Если вам нужен словарь, поддерживающий порядок вставки, я бы предложил использовать CHDataStructures Framework , который имеет класс CHOrderedDictionary (это потомок NSMutableDictionary). Документация для CHOrderedDictionary гласит:

Словарь, который перечисляет ключи в том порядке, в котором они вставлены.

Для заказа используются следующие дополнительные операции:

-firstKey

-lastKey

-keyAtIndex:

-reverseKeyEnumerator

Записи значения ключа вставляются так же, как в обычном словаре, включая замену значений для существующих ключей, как подробно описано в -setObject: forKey :. Однако параллельно используется дополнительная структура для отслеживания порядка вставки, и ключи перечисляются в этом порядке. Если добавляемый ключ в данный момент отсутствует в словаре, он добавляется в конец списка, в противном случае порядок вставки ключа не изменяется.

12 голосов
/ 30 октября 2009

Ключи NSDictionary не хранятся в порядке, но вы можете получить их и отсортировать, E. G:

for (key in [[myDict allKeys] sortedArrayUsingSelector:@selector(compare:)])
...
4 голосов
/ 22 октября 2013

Что-то, что я хотел бы добавить, если кто-то ищет это и натыкается на эту тему:

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

NSString *key = [arrayOfKeys objectAtIndex:0];
NSString *stringAtIndexZero = [unorderedDictionary objectForKey:key];
4 голосов
/ 30 октября 2009

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

0 голосов
/ 08 февраля 2012

Я также видел это, когда искал это: http://cocoawithlove.com/2008/12/ordereddictionary-subclassing-cocoa.html

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