它是否对NSMutableArray进行排序?

时间:2014-07-23 14:06:33

标签: ios objective-c sorting

我在该课程中有一个名为storeScores的单身人士,我有一个分数NSMutableArray。我想找到高分(这是数组中最低的浮点数)并使用我的viewController打印它。我正在调用此方法来对数组进行排序并获取其中的最小数字。

-(NSString*)getHighscore{
    NSMutableArray *scores2 = _scores;
    NSString *highest;
    float highScore;
    NSSortDescriptor *highestToLowest = [NSSortDescriptor sortDescriptorWithKey:@"self" ascending:YES];
    [scores2 sortUsingDescriptors:[NSArray arrayWithObject:highestToLowest]];
    highScore = [[scores2 firstObject]floatValue];
    highest = [NSString stringWithFormat:@"%.02f",highScore];
    return highest;
}

当我这样做时,我看到' 0.00'在标签上。当我执行highScore = [[scores2 objectAtIndex:0]floatValue];而不是highScore = [[scores2 firstObject]floatValue];时,应用程序崩溃了。有什么问题?

2 个答案:

答案 0 :(得分:1)

来自the documentationfirstObject

  

返回值
数组中的第一个对象。如果数组为空,   返回nil。

objectAtIndex:

  

返回值
对象位于索引。

     

讨论
如果索引超出了数组的末尾(即索引   大于或等于count)返回的值,a   引发了NSRangeException。

因此,唯一可以解释您所看到的不同行为的事情是:数组在索引0处没有对象。它是空的。

添加NSLog _scoresscores2进行确认。

答案 1 :(得分:0)

为了更好地对阵列进行排序,我建议你这样做:

- (NSNumber*)getHighscore{

    if(_scores.count >= 1) {
        float minValue = MAXFLOAT; // minValue = highest score
        for (NSNumber *number in _scores) {
            float x = number.floatValue;
            if (x < minValue) minValue = x;
        }
        return [NSNumber numberWithFloat:minValue];
    }
    else
        return nil;
}

使用这样的方法:

NSLog(@"Lowest value (highest score): %@", [[self getHighscore] stringValue]);