получить содержимое nsdictionary в nsarray без изменения порядка - PullRequest
0 голосов
/ 30 марта 2012

Я использую:

NSArray *values = [myDict allValues];

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

Содержимое получено из URL иполучено следующим образом:

NSDictionary *myDict = [[NSDictionary alloc] initWithContentsOfURL:url];    

Я хочу сохранить порядок содержимого.Как мне это сделать?

Спасибо

Ответы [ 4 ]

3 голосов
/ 30 марта 2012

Порядок ключей в NSDictionary не определен

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

Существует arrayWithContentsOfURL, но я не знаю, что вам поможет, так как файл должен быть в правильном формате.

1 голос
/ 30 марта 2012

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

0 голосов
/ 30 марта 2012

К сожалению, в словарях NS нет понятия о порядке.Нет гарантии, что вы вернете объекты в том же порядке, в котором вы их поместили.

Вы можете (пере) отсортировать объекты после того, как они находятся в массиве, используя -[NSArray sortedArrayUsingSelector:]

Другой вариант - использовать другой контейнер, отличный от NSDictionary, который гарантирует порядок.У Мэтта Галлахера есть пример кластера классов, чтобы подтвердить это в этом блоге: «OrderedDictionary: создание подкласса кластера классов какао»

0 голосов
/ 30 марта 2012

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

[anArray sortedArrayUsingSelector:@selector(mySortFunc:)];

Итак, вы вызываете это, а затем создаете пользовательскую функцию сортировки:

- (NSComparisonResult)mySortFunc:(Object *)otherObject {
    //Implement this to how you want to sort it.
    // return
}

Смотрите здесь более подробно:

Как отсортировать NSMutableArray с пользовательскими объектами в нем?

Или как альтернатива: посмотрите на мой комментарий со ссылкой накак сделать заказанный NSDictionary.

http://cocoawithlove.com/2008/12/ordereddictionary-subclassing-cocoa.html

...