我想对一个NSMutableArray进行排序,该NSMutableArray具有与NSArray的索引1处的值相关的NSArrays。我将尝试绘制阵列图片。
NSMutableArray *ultimateHighscoreArray = {
( (NSString) userName, (double) score, (int) numOfCorrectAnswers ) ,
( John , 4.5 , 3 ) ,
( Terry , 7.5 , 1) ,
... }
NSMutableArray中的第一个数组是一个显示示例如何定位的示例。第二和第三是价值实际上是如何。所以,我想要的是对这些数组进行排序,使得在第一个索引处包含更高值的数组在排名中更高。对于此示例,具有7.5的特里阵列的数组应该在具有4.5的数组之前。我希望结果按递减顺序保存在NSMutableArray中。谢谢。
答案 0 :(得分:2)
这应该这样做:
[ultimateHighscoreArray sortUsingComparator:^(id obj1, id obj2) {
NSNumber *score1 = [obj1 objectAtIndex:1];
NSNumber *score2 = [obj2 objectAtIndex:2];
// Reverse the comparison here (compare score2 to score1)
// in order to get a descending order
return [score2 compare:score1];
}];
一般建议:如果数据结构是NSDictionary
个实例的数组,或者甚至是自定义对象数组(例如,您的自定义Score
类),那么您的数据结构会更清晰。在这些情况下,您还可以使用NSSortDescriptor
对数组进行排序,这样可以生成更清晰,更易于阅读的代码。
答案 1 :(得分:2)
sortUsingComparator:
方法允许您使用块对数组进行排序,例如:
[ultimateHighscoreArray sortUsingComparator:^(id obj1, id obj2) {
return [[obj1 objectAtIndex:1] compare:[obj2 objectAtIndex:1]];
}];
为清楚起见,为这个数据结构使用字典数组(或自定义类的实例)可能会更好。
答案 2 :(得分:0)
您可以像这样编写自定义比较器:)
[ultimateHighscoreArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
NSArray *arrayA = (NSArray *)obj1;
NSArray *arrayB = (NSArray *)obj2;
double scoreA = [arrayA objectAtIndex:1];
double scoreB = [arrayB objectAtIndex:1];
if (scoreA > scoreB) {
return NSOrderedDescending;
} else if (scoreA < scoreB) {
return NSOrderedAscending;
} else {
return NSOrderedSame;
}
}];