сортировка массива объектов по значению CGFloat - PullRequest
0 голосов
/ 11 мая 2018

Я получаю массив объектов в функции ниже, каждый элемент в этом массиве содержит значение, которое является типом CGFloat, я использую эту функцию ниже, но получаю сообщение об ошибке в строке возврата: «Ожидаемый идентификатор»

- (void)setupPieChartWithItems:(NSArray *)items {

    NSArray *sortedArray = [items sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
        CGFloat first = [(PNPieChartDataItem*)a value];
        CGFloat second = [(PNPieChartDataItem*)b value];
        return [first > second];
    }];
}

Где ошибка? Есть идеи?

Ответы [ 3 ]

0 голосов
/ 11 мая 2018

Вы можете заменить свой код для сортировки следующим:

NSSortDescriptor *highestToLowest = [NSSortDescriptor sortDescriptorWithKey:@"self" ascending:YES];
NSMutableArray *sortedArray = items.mutableCopy;
[sortedArray sortUsingDescriptors:[NSArray arrayWithObject:highestToLowest]];

Установка YES на ascending приведет к 1,3, 2,6, 3,1…, тогда как установка NO приведет к 3,1, 2,6, 1,3…

Скажите, если вам нужна помощь :)

0 голосов
/ 11 мая 2018

Снимите скобки с [first > second], чтобы исправить ошибку компилятора, и блок должен вернуть NSComparisonResult:

- (void)setupPieChartWithItems:(NSArray *)items {
    NSArray *sortedArray = [items sortedArrayUsingComparator:^NSComparisonResult(PNPieChartDataItem *a, PNPieChartDataItem *b) {
        CGFloat first = [a value];
        CGFloat second = [b value];
        if (first > second)
            return NSOrderedDescending;
        if (first < second)
            return NSOrderedAscending;
        return NSOrderedSame;
    }];
}

Как в этом ответе как отсортировать NSArray значений с плавающей запятой? .

0 голосов
/ 11 мая 2018

Проблема может заключаться в скобках в этом [first > second];, поскольку sortedArrayUsingComparator требуется для возврата значения NSComparisonResult, а не массива значения bool

замените ваш код на

- (void)setupPieChartWithItems:(NSArray *)items {

    NSArray *sortedArray = [items sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
        CGFloat first = [(PNPieChartDataItem*)a value];
        CGFloat second = [(PNPieChartDataItem*)b value];
        return [[NSNumber numberWithFloat:first] compare:[NSNumber numberWithFloat:second]];

     }];
}

Надеюсьполезно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...