2010-10-06 5 views
0

Я сделал собственный класс. Это ч файлКак изменить этот код, чтобы сортировать NSMutableArray?

@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 

Это м файлу

#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]); 
    } 
} 

Как это, он просто будет показывать игроков в порядке их добавления выше.

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

Что такое код для сортировки массива allTeams по командам? Нужно ли использовать категории?

ответ

4

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

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

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

+2

Получил его назад, оператор массива на первом месте, поэтому @ sum.points :) также обратите внимание, что метод удобства класса доступен только на iOS 4.0+, поэтому он будет аварийно завершен IPADS. –

+0

Удивительный, спасибо! Является ли сортировка по количеству игроков так же просто? –

+0

@awakeFromNib да, используйте '@ count' вместо' @ sum' –

Смежные вопросы