2013-05-05 48 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