Создать NSDictionary с поддержкой заказов - PullRequest
1 голос
/ 29 декабря 2011

Мне нужен объект NSDictionary, который не только поддерживает хранение ключей-> значений, но также поддерживает последовательность key, как это делает Array.

Есть ли что-то на Objective-C?

Ответы [ 5 ]

1 голос
/ 30 декабря 2011

Ответ Моноло - правильный способ сделать это.

[self allKeys] не возвращает упорядоченную последовательность.это стиль NSSet.

И я пишу класс с именем PLHash, который имеет множество функций:

  • хранение значений ключей
  • поддержка порядка ключей
  • максимальный размер элементовcontrol (установите maxItems на PLHash, и он будет хранить элементы по FIFO)

вот URL https://github.com/xhan/PlutoLand/blob/master/PlutoLand/Additions/PLHash.h

1 голос
/ 29 декабря 2011

Я нашел эту статью (и связанный исходный код) полезной: http://cocoawithlove.com/2008/12/ordereddictionary-subclassing-cocoa.html

0 голосов
/ 30 декабря 2011

Один из вариантов - создать категорию в nsdictionary, назвать ее sortedKeys или чем-то, что возвращает отсортированные [self allKeys].

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

@interface NSDictionary (sort)

- (NSArray *)sortedKeys;

@end

@implementation NSDictionary (sort)

- (NSArray *)sortedKeys {

    NSArray *keyArray = [self allKeys];
    NSArray *sortedKeyArray = [keyarray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

    return sortedKeyArray;
}

@end

Лично я не думаю, что использование подклассов NSDictionary - это путь.

0 голосов
/ 30 декабря 2011

Лучше всего либо получить массив allkeys и отсортировать его, затем получить значение для ключа, либо создать собственный класс для хранения объектов так, как вы этого хотите. Звучит так, будто вы делаете что-то, чего NSDictionary не создавал, что вы пытаетесь сделать, если хотите, чтобы ключи были отсортированы?

0 голосов
/ 29 декабря 2011

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

...