Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sort by distance

I have a set of dictionaries in an array. I display this data in a tableview. In the tableview i calculate the distance to each object and display that in the cell.

The data needs to be able to sort based on ascending distance, obviously per userlocation What's the best way to approach this? I thought of picking apart all of the dictionaries and inserting the distance and then letting loose the NSSortDescriptor, problem is, i'm way too lazy for that.

Right now im just looping through all of the data with the indexPath.row and displaying it.

like image 663
MaikelS Avatar asked Oct 14 '11 14:10

MaikelS


1 Answers

You can easily sort with a the block based comparator api.

NSArray *rawData = [NSArray arrayWithContentsOfFile:pathDoc];

rawData = [rawData sortedArrayUsingComparator: ^(id a, id b) {

    CLLocationDistance dist_a= [[a objectsForKey:@"coordinate"] distanceFromLocation: userPosition];
    CLLocationDistance dist_b= [[b objectsForKey:@"coordinate"] distanceFromLocation: userPosition];
    if ( dist_a < dist_b ) {
        return NSOrderedAscending;
    } else if ( dist_a > dist_b) {
        return NSOrderedDescending;
    } else {
        return NSOrderedSame;
    }
}];

You should easy find an implementation for calculate_distance(user_position, a); with google.

like image 184
vikingosegundo Avatar answered Nov 03 '22 22:11

vikingosegundo