Objective-C: Сортировка ключей NSDictionary на основе словарных статей

ОК, поэтому я знаю, что словари не могут быть отсортированы. Но, скажем, у меня есть NSMutableArray *keys = [someDictionary allKeys]; Теперь я хочу отсортировать эти ключи на основе соответствующих значений в словаре (в алфавитном порядке). Поэтому, если словарь содержит key=someString, тогда я хочу сортировать keys на основе строк, которым они соответствуют. Я думаю, что его применение sortUsingComparator, но его немного не в моих силах в этот момент.

Ответ 1

NSArray *keys = [someDictionary allKeys];
NSArray *sortedKeys = [keys sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
    NSString *first = [someDictionary objectForKey:a];
    NSString *second = [someDictionary objectForKey:b];
    return [first compare:second];
}];

Ответ 2

NSDictionary *dict = // however you obtain the dictionary
NSMutableArray *sortedKeys = [NSMutableArray array];

NSArray *objs = [dict allValues];
NSArray *sortedObjs = [objs sortedArrayUsingSelector:@selector(compare:)];
for (NSString *s in sortedObjs)
    [sortedKeys addObjectsFromArray:[dict allKeysForObject:s]];

Теперь sortedKey будет содержать ключи, отсортированные по соответствующим объектам.

Ответ 3

Сортировка ключей NSDictionary на основе ключей словаря

Abobe предназначен для возврата отсортированного массива на основе содержимого словаря, это для возврата массива , отсортированного по ключевому слову слова:

NSArray *keys = [theDictionary allKeys];
NSArray *sortedKeys = [keys sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
    return [a compare:b];
}];
NSMutableArray *sortedValues = [NSMutableArray new];
for(NSString *key in sortedKeys)
    [sortedValues addObject:[dictFilterValues objectForKey:key]];

Ответ 4

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

//sort typeDict alphanumeric to show it in order of values
    NSArray *keys = [typeDict allKeys];

    NSArray *sortedKeys = [keys sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
        NSString *first = [typeDict objectForKey:a];
        NSString *second = [typeDict objectForKey:b];
        return [first compare:second];
    }];
    NSLog(@"sorted Array: %@", sortedKeys);

    NSMutableDictionary *sortedTypeDict = [NSMutableDictionary dictionary];
    int counter = 0;
    for(int i=0; i < [typeDict count]; i++){
        NSString *val = [typeDict objectForKey:[sortedKeys objectAtIndex:counter]];
        NSString *thekey = [sortedKeys objectAtIndex:counter];
        [sortedTypeDict setObject:val forKey:thekey];
        counter++;
    }
    NSLog(@"\n\nsorted dict: %@", sortedTypeDict);

Неважно!