Есть ли метод, чтобы получить Макс и Мин NSMutableArray - PullRequest
14 голосов
/ 06 февраля 2012

Есть ли в iOS способ получить значения Max и Min для NSMutableArray с двойными числами. Я ищу уже существующий метод, а не для сортировки массива самостоятельно. Если у меня есть метод, встроенный в API, для сортировки массива, который меня тоже заинтересовал бы.

Спасибо

Ответы [ 4 ]

46 голосов
/ 06 февраля 2012

Если вы хотите просто получить минимальную и максимальную пары:

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 также есть методы, которые будут возвращать новые отсортированные массивы вместо изменения текущего массива.См. Документацию для NSArray и NSMutableArray для получения дополнительной информации.

2 голосов
/ 04 апреля 2014
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);
2 голосов
/ 29 сентября 2012

Сортировка - O (nlogn), поэтому, если вы хотите, чтобы максимум и мин были только один раз, пожалуйста, не делайте сортировку.Лучший способ - это просмотреть массив и сравнить его по одному, и он будет линейным, т. Е. O (n).

1 голос
/ 30 мая 2015

Если вы хотите получить максимальное значение в целых числах, используйте это: -

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

Если вы хотите получить максимальное значение в NSNumber, используйте это: -

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