Как изменить этот код, чтобы отсортировать NSMutableArray? - PullRequest
0 голосов
/ 06 октября 2010

Я сделал пользовательский класс. Это файл h

@interface Player : NSObject {
    NSString *name;
    NSNumber *points;
}

@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSNumber *points;

-(id) initWithName:(NSString *)n andPoints:(int)p;

@end

Это файл m

#import "Player.h"

@implementation Player
@synthesize name, points;

-(id) initWithName:(NSString *)n andPoints:(int)p
{
    self.name = n;
    self.points = [NSNumber numberWithInt:p];
    return self;
}
@end

Затем я создаю несколько игроков и назначаю их одной из двух команд, например:

Player *p1 = [[Player alloc] initWithName:@"Joe" andPoints:5];
Player *p2 = [[Player alloc] initWithName:@"James" andPoints:5];
Player *p3 = [[Player alloc] initWithName:@"Jim" andPoints:5];

NSMutableArray *team1 = [[NSMutableArray alloc] initWithObjects:p1,p2,p3,nil];

Player *p4 = [[Player alloc] initWithName:@"Aaron" andPoints:7];
Player *p5 = [[Player alloc] initWithName:@"Anthony" andPoints:7];
Player *p6 = [[Player alloc] initWithName:@"Alex" andPoints:7];

NSMutableArray *team2 = [[NSMutableArray alloc] initWithObjects:p4,p5,p6,nil];

Затем я помещаю эти две команды в другой NSMutableArray, как это:

NSMutableArray *allTeams = [[NSMutableArray alloc] initWithObjects:team1, team2, nil];

Чтобы отобразить всех игроков и их очки, я использую этот цикл:

for (NSMutableArray *teamArray in allTeams) {
    for (Player *player in teamArray) {
        NSLog(@"%@: %@", [player name], [player points]);
    }
}

На самом деле, он просто покажет игрокам в порядке их добавления выше.

Я хочу отсортировать этот массив команд по точкам команды, которые являются просто суммой очков каждого отдельного игрока в команде. Затем, когда цикл запускается для отображения всех игроков, игроки в team2 будут отображаться перед team1.

Какой код сортирует массив allTeams по групповым баллам? Нужно ли использовать категории?

1 Ответ

4 голосов
/ 06 октября 2010

На самом деле все будет очень просто.Do:

[allTeams sortUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"@sum.points" ascending:NO]]];

Надеюсь, все получилось правильно.Ввод кода на iPhone - это боль ...

...