如何排序这个NSMutableArray?

时间:2010-10-05 18:31:40

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

我创建了一个名为Person的类。看起来像这样

Person
-------
Name
Points

然后我创建了一个名为team的NSMutableArray。它包含几个这些人物对象。我创建了几个团队。

然后我创建了另一个名为allTeams的NSMutableArray。它包含所有团队阵列。

我想按照每个团队的总点数对allTeams数组进行排序,通过对团队中每个人的积分求和来找到。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

为什么不在团队对象中维护一个int变量,该变量是团队中每个人的累积分数?如果您想进行比较,只需根据该字段进行排序。任何排序算法都可以使用,内存需求明显不足(就地与额外分配的内存相比)和最差情况下的运行时间(O(n ^ 2),O(nlog(n))。

在第一次请求排序信息时,所有团队的得分计算将为O(n ^ 2)。之后,每当一个人得分时,只需调用一个选择器来更新该人得分,然后更新团队得分。

答案 1 :(得分:1)

除非你拥有数百万玩家和成千上万的团队,否则不需要使用无关的ivars,天真的实施将比你可能需要的更快。

@interface Team : NSObject {
    NSMutableArray *people;
}

@property (readonly) NSInteger score;

@end

@implimentation Team

- (NSInteger)score {

    NSInteger score = 0;

    for(Person *person in people) {
        score = score + person.points;
    }

    return score;
}

@end

// To sort an array of teams, do the following
// assumes that `teams` is a mutable array containing all teams

NSSortDescriptor *scoreSort = [[NSSortDescriptor alloc] initWithKey:@"score" ascending:NO];
[teams sortUsingDescriptors:[NSArray arrayWithObject:scoreSort]];
[scoreSort release];

免责声明:我编写了上面的代码而无法访问我的Mac,所以它可能无法编写,但它已经接近了。祝你好运!