有没有一种方法可以获得NSMutableArray的Max和Min

时间:2012-02-06 16:27:49

标签: ios nsmutablearray max min

iOS中是否有办法让我获得双数的NSMutableArray的Max和Min值。我正在寻找一种已经存在的方法,而不是我自己对数组进行排序。如果有一种方法让我构建到API中,我也可以对我感兴趣的数组进行排序。

谢谢

4 个答案:

答案 0 :(得分:46)

如果您想简单地获得最小和最大双打:

NSNumber* min = [array valueForKeyPath:@"@min.self"];
NSNumber* max = [array valueForKeyPath:@"@max.self"];

如果您只想对它们进行排序:

// the array is mutable, so we can sort inline
[array sortUsingSelector:@selector(compare:)];

NSNumber类将使用compare:很好地排序,但如果您需要进行更复杂的排序,则可以使用-sortUsingComparator:方法进行排序。 NSArray上还有一些方法将返回已排序的新数组,而不是修改当前数组。有关详细信息,请参阅NSArrayNSMutableArray的文档。

答案 1 :(得分:2)

排序是O(nlogn),所以如果你只需要max和min一次,请不要排序。最好的方法是通过数组并逐个进行比较,这是线性的,即O(n)。

答案 2 :(得分:2)

NSMutableArray * array=[[NSMutableArray alloc]initWithObjects:@"1",@"2",@"3",@"4",@"5",@"6", nil];

NSLog(@"Array:%@",array);


int maxValue;
for (NSString * strMaxi in array) {
    int currentValue=[strMaxi intValue];
    if (currentValue > maxValue) {
        maxValue=currentValue;
    }
}
int miniValue;
for (NSString * strMini in array) {
    int currentValue=[strMini intValue];
    if (currentValue < miniValue) {
        miniValue=currentValue;
    }
}


NSLog(@"Maxi:%d",maxValue);
NSLog(@"Mani:%d",miniValue);

答案 3 :(得分:1)

如果要获得整数的最大值,请使用: -

int max = [[array valueForKeyPath:@"@max.intValue"] intValue];

如果你想在NSNumber中获得最大值,请使用: -

NSNumber * max = [array valueForKeyPath:@"@max.intValue"];