如何按最近的距离排列对象数组(纬度,经度)?

我有一个从核心数据的数组,我想我怎么能sorting数组的距离最近的距离:

for (int i=0; i<allTasks.count; i++) { id singleTask = allTasks[i]; double latitude = [singleTask[@"latitude"] doubleValue]; double longitude = [singleTask[@"longitude"] doubleValue]; } 

编辑:当前位置和数组中所有位置之间的距离。 我知道如何计算距离,我不知道如何sorting。

  1. 获取你的currentPosition的CLLocation(这是通过CLLocationManager完成的)

  2. 计算每个项目的距离并将距离+项目存储为字典中的Pair

  3. 用比较:select器sorting字典allKeys数组

所以

 CLLocation *current = ...; NSMutableDictionary *distsAndTasks [NSMutableDictionary dictionary]; for(id task in allTasks) { CLLocation *taskLoc = [[CLLocation alloc] initWithLatitude:task.lat longitude:task.long];//! CLLocationDistance dist = [taskLoc distanceFrom:current]; if(distsAndTasks[@(dist)]) { NSMutableArray *equidstants = [distsAndTasks[@(dist)] mutableCopy]; [equidstants addObject:task]; distsAndTasks[@(dist)] = equidstants; } else { distsAndTasks[@(dist)] = @[task]; } } NSArray *sortedDists = [distsAndTasks.allKeys sortedArrayUsingSelector:@selector(compare:)]; //the tasks can now be access in a sorted way for(NSNumber *dist in sortedDists) { NSArray *tasksAtDistance = distsAndTasks[dist]; NSLog(@"%@", tasksAtDistance); } 

那么你想sorting你的allTask​​s数组?

最好的办法是将一个距离键/值对添加到每个singleTask对象,持有一个双重的NSNumber。

在第一遍中,循环访问allTask​​s数组,获取每个经纬度,使用它创build一个CLLocation,并使用CLLocation方法distanceFromLocation:计算每个位置与目标(当前?)位置之间的距离。 将结果保存到数组中的每个singleTask对象中。

一旦您的allTask​​s数组包含distance属性,只需使用sortUsingComparator之类的sorting方法就可以根据距离值对数组进行sorting。 (在sortUsingComparator系列方法中,您提供了一个比较器块,系统用来比较objets对,然后在您的数组上运行sortingalgorithm,使用比较器来决定sorting顺序。