Сортировка данных NSMutableDictionary - PullRequest
1 голос
/ 21 января 2012

Я имею NSMutableDictionary с, заполняется динамически. Это выглядит так:

{
    SomeKey = 6;
    AnotherKey = 2;
    JustAnotherKey = 28;
}

Мне нужно отсортировать это, так что это будет так:

{
    JustAnotherKey = 28;
    SomeKey = 6;
    AnotherKey = 2;
}

Есть ли способ достичь этого? Заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 21 января 2012

Нет, извините!

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

Получить массив keys из своего словаря, отсортировать его изатем пройдите и получите значения из своего словаря.Что-то вроде:

NSArray *keys = [myDictionary allKeys];
NSArray *sortedKeys = [keys sortedArrayUsingSelector:@selector(compare:)];

NSArray *values = [NSMutableArray array];
for (id key in sortedKeys)
    [values addObject:[myDictionary objectforKey:key]];

Теперь значения в правильном порядке.

Однако это довольно много работы;если вы хотите, чтобы они были отсортированы, я хотел бы начать с их хранения в массиве?

1 голос
/ 21 января 2012

Словарь - это неупорядоченный набор, что означает, что у него нет порядка элементов. Так что, даже если вы вставите первый объект, как, скажем, «one»: «first value», а затем «two»: «second значение ", когда вы перебираете ключи, вы можете получить его в любом случайном порядке (например," два "и затем" один ").

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

NSArray *values=[myDict allValues];
NSMutableArray *sortedKeys=[[NSMutableArray alloc] init];
NSArray *sortedValues = [values sortedArrayUsingSelector:@selector(yourSelector)];
for (val in sortedArray){
   NSString *key=(NSString*)[[myDict allKeysForObject:val] objectAtIndex:0];
   [sortedKeys addObject:key]
}

Это будет начало для получения сначала значений в отсортированном порядке, а затем соответствующих ключей. (Он не выполняет никаких проверок ошибок. Поэтому остерегайтесь исключений OutOfIndex).
Я не уверен, насколько хорошей была бы эффективность этого кода, ведь coz allKeysForObject будет перебирать все ключи.

1 голос
/ 21 января 2012

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

Это достаточно полезно?

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