我创建了一个名为Person的类。看起来像这样
Person
-------
Name
Points
然后我创建了一个名为team的NSMutableArray。它包含几个这些人物对象。我创建了几个团队。
然后我创建了另一个名为allTeams的NSMutableArray。它包含所有团队阵列。
我想按照每个团队的总点数对allTeams数组进行排序,通过对团队中每个人的积分求和来找到。
我该怎么做?
答案 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,所以它可能无法编写,但它已经接近了。祝你好运!