2013-05-05 54 views
-2

现在我遍历一个数组循环一次和计算距离是这样的:如何通过阵列

- (void)calculateDistance 
{ 

    ann = [dict objectForKey:@"Blue"]; 


     for(int i = 0; i < [ann count]; i++) { 


      NSString *coordinates = [[ann objectAtIndex:i] objectForKey:@"Coordinates"]; 

      double realLatitude = [[[coordinates componentsSeparatedByString:@","] objectAtIndex:1] doubleValue]; 
      double realLongitude = [[[coordinates componentsSeparatedByString:@","] objectAtIndex:0] doubleValue]; 

      // Calculating distance 
      CLLocation *pinLocation = [[CLLocation alloc] 
               initWithLatitude:realLatitude 
               longitude:realLongitude]; 

      CLLocation *userLocation = [[CLLocation alloc] 
               initWithLatitude:mapView.userLocation.coordinate.latitude 
               longitude:mapView.userLocation.coordinate.longitude]; 

      CLLocationDistance distance = [pinLocation distanceFromLocation:userLocation]; 


      // Adding distance to dictionaries 
      if (distance > 1000) { 
      NSString *dist = [NSString stringWithFormat:@"%.2f km.", distance/1000]; 
      NSMutableDictionary *inDict = [[NSMutableDictionary alloc] init]; 
      inDict = [ann objectAtIndex:i]; 
      [inDict setValue:dist forKey:@"Distance"]; 
      } 
      else{ 
      NSString *dist = [NSString stringWithFormat:@"%4.0f m.", distance]; 
      NSMutableDictionary *inDict = [[NSMutableDictionary alloc] init]; 
      inDict = [ann objectAtIndex:i]; 
      [inDict setValue:dist forKey:@"Distance"]; 
      } 


     } 

} 

我的数据结构为:

data structure

如何通过所有阵列的在循环一旦?我有数组,它包含我所有的Array的命名为 “resultArray”,但是这个代码不工作:

ann = [dict objectForKey:resultArray]; 

的NSLog(@ “%@”,resultArray);

2013-05-05 10:57:03.643 testApp[5708:907] (
    Black, 
    Green, 
    Orange, 
    Blue, 
    Darkblue 
) 
+0

“不起作用”是非信息性的。告诉我们究竟是什么错误。 – 2013-05-05 08:07:41

+0

如果我这样做:ann = [dict objectForKey:resultArray];距离不添加到字典,如果我这样做:ann = [dict objectForKey:@“Blue”];或ann = [dict objectForKey:@“Yellow”];等等。距离增加到蓝色,黄色字典 – 2013-05-05 08:17:18

+1

你可以检查我的答案。 – Anupdas 2013-05-05 09:20:26

回答

2

我想你想通过存储在resultArray中的键枚举并计算距离并将计算值添加到它。

- (void)calculateDistance 
{ 
    //Enumerates through resultArray 
    for (NSString *key in resultArray) { 

     //ann array is considered as an instance of NSMutableArray 

     ann = dict[key]; 

     for(int i = 0; i < [ann count]; i++) { 

      NSMutableDictionary *inDict = [ann[i] mutableCopy]; 

      NSString *coordinates = inDict[@"Coordinates"]; 

      NSArray *coordinateComponents = [coordinates componentsSeparatedByString:@","]; 

      double realLatitude = [coordinateComponents[1] doubleValue]; 
      double realLongitude = [coordinateComponents[0] doubleValue]; 

      // Calculating distance 
      CLLocation *pinLocation = [[CLLocation alloc] initWithLatitude:realLatitude 
                   longitude:realLongitude]; 

      CLLocation *userLocation = [[CLLocation alloc] 
             initWithLatitude:mapView.userLocation.coordinate.latitude 
             longitude:mapView.userLocation.coordinate.longitude]; 

      CLLocationDistance distance = [pinLocation distanceFromLocation:userLocation]; 


      // Adding distance to dictionaries 
      if (distance > 1000) { 
       NSString *dist = [NSString stringWithFormat:@"%.2f km.", distance/1000]; 
       [inDict setValue:dist forKey:@"Distance"]; 
      } 
      else{ 
       NSString *dist = [NSString stringWithFormat:@"%4.0f m.", distance]; 
       [inDict setValue:dist forKey:@"Distance"]; 
      } 
      //Inserting the modified values to the main array 
      [ann replaceObjectAtIndex:i withObject:inDict]; 

     } 

    } 

} 
+0

对不起,这正是我需要的!非常感谢! – 2013-05-05 09:24:58

+0

@PavelKaljunen这是一种快乐,愉快的编码。 – Anupdas 2013-05-05 09:27:04

0
ann = [dict objectForKey:resultArray]; 

for(NSArray *colourArray in ann) 
{ 
    for(NSDictionary *itemDictionary in colourArray) 
    { 
     NSLog(@"Coordinates = %@",[itemDictionary objectForKey:@"Coordinates"]); 

     NSLog(@"Name = %@",[itemDictionary objectForKey:@"Name"]); 

     NSLog(@"Address = %@",[itemDictionary objectForKey:@"Address"]); 
    } 
} 

希望它会帮助你。

+0

对我不起作用( – 2013-05-05 08:18:15

+0

)如果你的问题中提到的数据结构与你的问题相同,那么它必须适合你,让NSLogs处于不同的步骤并调试问题出在哪里。 resultArray。 – 2013-05-05 08:23:35