按计算的距离排序NSMutableArray

时间:2015-04-20 16:08:29

标签: ios objective-c nsmutablearray nsarray

我在NSArray中有几个餐馆的列表,我想将与我的位置最接近的餐馆复制到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的有效方法

1 个答案:

答案 0 :(得分:2)

您可以将原始数组复制到已排序的数组中,然后根据相对于“self”的每个条目的距离对其进行排序。

在代码中我假设距离是浮点数。使用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;
  }];
}

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

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