2015-04-20 46 views
0

我得在一个NSArray几家餐馆的名单,我想复制是最接近我的位置到一个NSMutableArray,责令的那些......我有下面的代码秩序的NSMutableArray通过计算距离

@property(strong, nonatomic) NSArray *restaurants; 
@property(strong, nonatomic) NSMutableArray *orderedRestaurants; 

-(void) orderRestaurants{ 
    for(RestaurantBranch *restaurant in _restaurants){ 
     if([self getDistance:restaurant]<10){ 
      [_orderedRestaurants addObject:restaurant]; 
     } 
    } 
} 

,但我无法找到一个有效的方法所计算的距离订购的NSMutableArray

回答

2

您可以将原来的数组排序它的距离相对于每个'自我”的条目复制到排序的数组,然后。

在代码中我假设距离是一个浮点数。使用whataver类型你的距离被定义为。

- (void) orderRestaurants{ 
    self.orderedRestaurants=[self.restaurants mutableCopy]; 
    [self.orderedRestaurants sortUsingComparator:^NSComparisonResult(id a, id b) { 
     NSComparisonResult result=NSOrderedSame; 
     float distancea=[self getDistance:(RestaurantBranch *)a]; 
     float distanceb=[self getDistance:(RestaurantBranch *)b]; 
     if (distancea < distanceb){ 
     result = NSOrderAscending; 
     } 
     else if (distanceb < distancea){ 
     result = NSOrderDescending; 
     } 
     return result; 
    }]; 
} 

结果是按距离排序的原始分支数组。

这将多次计算距离。根据您的距离计算的复杂程度,您可以查看缓存距离。