How to sort a NSArray of NSDictionaries by distance
Suppose you have a TableView filled with the info of a NSArray (self.shopsArray). Each position in the array has a NSDictionary with the info of a shop (retrieved from a REST API, Plist file, whatever):
{
id = 1;
latitude = "-25.0007";
longitude = "-23.5678";
name = "An awesome shop";
}
Then you can sort it in a nice way using a Comparator:
- (void)sortTableWithCurrentLocation:(CLLocation *)currentLocation
{
self.shopsArray = [self.shopsArray sortedArrayUsingComparator: ^(id a, id b)
{
CLLocation *shopLocationA = [[CLLocation alloc] initWithLatitude:[[a objectForKey:@"latitude"] doubleValue] longitude:[[a objectForKey:@"longitude"] doubleValue]];
CLLocation *shopLocationB = [[CLLocation alloc] initWithLatitude:[[b objectForKey:@"latitude"] doubleValue] longitude:[[b objectForKey:@"longitude"] doubleValue]];
CLLocationDistance distA = [shopLocationA distanceFromLocation:currentLocation];
CLLocationDistance distB = [shopLocationB distanceFromLocation:currentLocation];
if (distA < distB) {
return (NSComparisonResult)NSOrderedAscending;
} else if ( distA > distB) {
return (NSComparisonResult)NSOrderedDescending;
} else {
return (NSComparisonResult)NSOrderedSame;
}
}];
[self.tableView reloadData];
}
Written by Juan Fernández Sagasti
Related protips
1 Response
Thanks, I learnt that there is class CLLocation to handle location stuff.
over 1 year ago
·
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#Sorting
Authors
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#