Существует ли метод получения Max и Min NSMutableArray

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

Спасибо

Ответы

Ответ 1

Если вы хотите просто получить удвоение min и max:

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

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

Ответ 3

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);

Ответ 4

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

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

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

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