2015-05-22 1 views
0

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

Теперь вот мой вопрос -

у меня есть ViewController, который я сделал, как синглтон, внутри этого VC я определил:

@property (nonatomic) NSMutableDictionary *dictionary; 

Теперь я пытаюсь доступ к этому словарю из различных другие классы и установить его содержимое через:

[[[ViewController sharedViewController] dictionary] setValue:[NSNumber numberWithBOOL:NO] forKey:@"xx"] , yy ,zz and so on 

У меня есть мои делегаты, которые ударили бы по определенному ключу (xx, yy, zz и т. Д.). Теперь, когда удаляется конкретный метод делегата, мне нужно обновить словарь с тем же ключом, но [NSNumber numberWithBOOL:YES], который происходит .. но порядок, в котором я добавил элементы в словаре, не поддерживается ... Как я могу достичь этого? Мне нужно поддерживать порядок так же, как я добавил свои предметы в словарь на первом месте?

Может кто-то, пожалуйста, помогите мне?

+3

Прочтите документацию. NSDictionary неупорядочен. –

+0

Кроме того, ваше описание не имеет смысла. –

ответ

0

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

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

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

1

Как указано, вы должны использовать NSArray, чтобы заказывать ваши значения. Вы также можете использовать некоторые сторонние API, например: M13OrderedDictionary или другие.

0

Вы можете сделать копию ключа, используя следующий код:

NSArray *allKeys = [dictionary allKeys]; 

Затем ключи все сохраненные в порядке, и вы можете получить доступ к определенной величины, получая конкретный ключ в AllKeys массиве и извлечения его с помощью dictionary[allKeys[2]].

+0

Как это сохранить порядок, в котором были добавлены значения? – Droppy

+0

Когда добавляется новое значение, вы должны добавить ключ в массив одновременно. –

+0

Документация для '- [NSDictionary allKeys]' явно заявляет: «Порядок элементов в массиве не определен.», Поэтому вам не следует ожидать, что массив, возвращаемый 'allKeys', будет в том порядке, в котором вы их добавили in. – Gavin

Смежные вопросы