【问题标题】:How to change this code so the NSMutableArray is sorted?如何更改此代码以便对 NSMutableArray 进行排序?
【发布时间】:2010-10-06 05:46:36
【问题描述】:

我创建了一个自定义类。这是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 数组进行排序的代码是什么?我需要使用类别吗?

【问题讨论】:

    标签: objective-c cocoa-touch sorting object nsmutablearray


    【解决方案1】:

    实际上非常简单。做:

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

    希望结果正确。在 iPhone 上输入代码很痛苦……

    【讨论】:

    • 搞错了,数组运算符排在第一位,所以@sum.points :) 还请注意,类便利方法仅适用于 iOS 4.0+,因此它会在当前 iPad 上崩溃。
    • 太棒了,谢谢!按玩家数量排序是否同样简单?
    • @awakeFromNib 是的,使用@count 而不是@sum
    猜你喜欢
    • 2016-05-17
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多