2016-09-27 4 views
0

у меня есть неупорядоченный NSMutableDictioanry и это dictioanry создается, как показано в примере нижеСортировка изменчивый словарь на основе значений него

{ 
    1 = 27; 
    2 = 5; 
    3 = 13964; 
    4 = 2422; 
    5 = 45; 
    6 = 7; 
    7 = 27; 
    8 = 39; 
} 

я хочу, чтобы отсортировать этот словарь, основанный на ценностях. И это может быть сделано в соответствии со следующей статьей, и это работает прекрасно Getting NSDictionary keys sorted by their respective values и возвращает массив с ключами, отсортированные на основе значений

(
    2, 
    6, 
    7, 
    1, 
    8, 
    5, 
    4, 
    3 
) 

Так что мой вопрос в любом случае, что я могу получить отсортированный словарь непосредственно вместо массива

+0

Что вы хотите сделать с отсортированного словаря? –

+0

NSDictionary не заботится о сортировке своих ключей, потому что это ключевая система доступа, а не система доступа к индексу для получения значений. – Larme

+0

Возможный дубликат [Сортировка по значениям в Swift] (http://stackoverflow.com/questions/24090016/sort-dictionary-by-values-in-swift) –

ответ

0

В качестве непараллельных решения объекта, можно использовать массив для хранения пар ключ-значение как массив из двух элементов. keyValuePair[0] - это ключ, а значение keyValuePair[1].

- (NSArray *)sortedDataFromDictionary:(NSDictionary *)dictionary { 
    NSMutableArray *result = [NSMutableArray arrayWithCapacity:dictionary.count]; 

    for (NSNumber *key in [dictionary keysSortedByValueUsingSelector:@selector(compare:)]) { 
     NSArray *keyValuePair = @[key, dictionary[key]]; 
     [result addObject:keyValuePair]; 
    } 

    return [result copy]; 
} 

Вначале, когда словарь был установлен (возможно, в -viewWillAppear:).

self.sortedData = [self sortedDataFromDictionary:dictionary]; 

Тогда в -tableView:cellForRowAtIndexPath: использования

NSNumber *key = self.sortedData[indexPath.row][0]; 
NSNumber *value = self.sortedData[indexPath.row][1]; 
0

Я не большой поклонник параллельных объектов, но вы можете захотеть иметь отсортированный массив ключей и словарь.

Раньше, когда был установлен словарь (возможно, в -viewWillAppear:).

self.sortedKeys = [self.dictionary keysSortedByValueUsingSelector:@selector(compare:)]; 

Затем в -tableView:cellForRowAtIndexPath: использования

NSNumber *key = self.sortedKeys[indexPath.row]; 
NSNumber *value = self.dictionary[key]; 
Смежные вопросы