2014-11-25 1 views
0

Перед лицом очень странной проблемы в NSMutableDictionary. См. Приведенный ниже код.NSMutableDictionary значение ключа перетасованное

NSMutableDictionary *dict=[[NSMutableDictionary alloc]init]; 
[dict setValue:@"India" forKey:(@"Title")]; 
[dict setValue:@"Done" forKey:(@"Status")]; 

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

{ 
Status =Done, 
Title=India; 
} 

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

Итак, как я могу решить эту проблему.

+1

Насколько я знаю, словарь не упорядочен. Если вам нужен заказ, используйте NSArray. – Jan

+0

Зачем вам нужен заказ? Кстати, это не проблема. – Kampai

ответ

0

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

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

NSArray * sortedKeys = [ [ myDictionary allKeys ] sortedArrayUsingSelector:... ] ; 

или

NSArray * sortedKeys = [ [ myDictionary allKeys ] sortedArrayUsingComparator:... ] ; 

Вы могли бы получить связанные объекты для если хотите.

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

1

Это не проблема.

Вы неправильно поняли или ошиблись NSDictionary. NSDictionary - это контейнер для хранения значений на клавишах.

Таким образом, нет необходимости в каком-либо заказе или индексировании.

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

Теперь о заказе - используйте NSArray вместо этого и более того, что используют NSArray с объектом NSDictionary. Так что у вас есть порядок со словарной поддержкой.

Еще способ сортировки словаря ключей ниже:

NSMutableDictionary *dict=[[NSMutableDictionary alloc]init]; 
[dict setValue:@"India" forKey:(@"Title")]; 
[dict setValue:@"Done" forKey:(@"Status")]; 

NSArray *keys = [dict allKeys]; 
keys = [keys sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; 

NSLog(@"%@",keys);