nsmutablearraynsindexpath

Sorting an array of NSIndexPaths


I have an NSMutableArray that contains NSIndexPath objects, and I'd like to sort them by their row, in ascending order.

What's the shortest/simplest way to do it?

This is what I've tried:

[self.selectedIndexPaths sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    NSIndexPath *indexPath1 = obj1;
    NSIndexPath *indexPath2 = obj2;
    return [@(indexPath1.section) compare:@(indexPath2.section)];
}];

Solution

  • You said that you would like to sort by row, yet you compare section. Additionally, section is NSInteger, so you cannot call methods on it.

    Modify your code as follows to sort on the row:

    [self.selectedIndexPaths sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        NSInteger r1 = [obj1 row];
        NSInteger r2 = [obj2 row];
        if (r1 > r2) {
            return (NSComparisonResult)NSOrderedDescending;
        }
        if (r1 < r2) {
            return (NSComparisonResult)NSOrderedAscending;
        }
        return (NSComparisonResult)NSOrderedSame;
    }];