1

我想对具有 NSArrays 的 NSMutableArray 进行排序,该 NSMutableArray 相对于 NSArray 的索引 1 处的值。我将尝试绘制数组的图片。

NSMutableArray *ultimateHighscoreArray = { 
    ( (NSString) userName, (double) score, (int) numOfCorrectAnswers ) , 
      ( John , 4.5 , 3 ) , 
      ( Terry , 7.5 , 1) , 
                                     ... }

NSMutableArray 中的第一个数组是一个示例,它显示了示例的位置。第二和第三是价值观的实际情况。所以,我想要的是对这些数组进行排序,这些数组在第一个索引处包含更高值的数组,以便在排名中更高。对于此示例,具有 7.5 的数组(即 Terry 数组)应位于具有 4.5 的数组之前。我希望将结果按降序保存在 NSMutableArray 中。谢谢你。

4

3 回答 3

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对数组进行排序,这将产生更清晰、更易于阅读的代码。

于 2012-06-20T14:05:57.533 回答
2

sortUsingComparator:方法允许您使用块对数组进行排序,例如:

[ultimateHighscoreArray sortUsingComparator:^(id obj1, id obj2) {
    return [[obj1 objectAtIndex:1] compare:[obj2 objectAtIndex:1]];
}];

为清楚起见,最好为此数据结构使用字典数组(或自定义类的实例)。

于 2012-06-20T14:06:05.420 回答
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;
    }
}];
于 2012-06-20T14:05:53.743 回答