Сортировать массив по ключу - PullRequest
0 голосов
/ 08 января 2010

В маленькой игре у меня есть два массива.

Если игрок получает оценку выше определенного значения, его имя и оценка выводятся через UILabel.

NSArray * namesArray = [mainArray objectForKey: @ "names"];
NSArray * highScoresArray = [mainArray objectForKey: @ "scores"];

Мне нужно, чтобы UILabels отображался с наибольшим количеством очков в порядке убывания с соответствующим именем. Я использовал NSSortDescriptor для числовой сортировки значений партитуры.

NSSortDescriptor * sortDescriptor; sortDescriptor = [[[NSSortDescriptor alloc] initWithKey: @ "self" по возрастанию: НЕТ] autorelease];

    NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
    NSArray *sortedScore = [[NSArray alloc]init];
    sortedScore = [scoresArray sortedArrayUsingDescriptors:sortDescriptors];

        NSMutableArray *scoreLabels = [NSMutableArray arrayWithCapacity:10];

    [scoreLabels addObject:scoreLabel1];
    ......

            NSUInteger _index = 0;
    for (NSNumber *_number in sortedScore) {
        UILabel *_label = [scoreLabels objectAtIndex:_index];
        _label.text = [NSString stringWithFormat:@"%d", [_number intValue]];
        _index++;
    }

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

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

Я не могу использовать тот же селектор сортировки, и я не хочу сортировать их по алфавиту, им нужно

, чтобы соответствовать значениям имени / оценки, которые были введены первыми.

Заранее спасибо

1 Ответ

1 голос
/ 08 января 2010

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

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