2012-12-18 41 views
0

我有一個數組來自服務器的數據。我無法更改服務器的響應。合併具有多個值的數組以形成一個數組/字典

{ 
    maximum = 30; 
    minimum = 1; 
    name = "Layer 1"; 
}, 
    { 
    maximum = 60; 
    minimum = 45; 
    name = "Layer 1"; 
}, 
    { 
    maximum = 60; 
    minimum = 45; 
    name = "Layer 2"; 
} 

我在這個數組中有3個對象。其中2個名稱相同,但具有不同的最小值和最大值。我想創建一個不會有重複的數組,因此例如我的數組中有2個對象,即「Layer 1」,「Layer 2」。第1層將具有2個最小值和最大值。

究竟應該如何樣子:

{ 

    name = "Layer 1"; value = [{maximum = 30; 
    minimum = 1},{ maximum = 60; 
    minimum = 45}]; 
}, 
    { 
    maximum = 60; 
    minimum = 45; 
    name = "Layer 2"; 
} 

我試圖檢查索引對象的「名稱」,「我」是在指數等於該對象的「名稱」,「I + 1" ,但它crahses,它說:「超出範圍(2):

rows = [mivne_shichva count]; 

     NSMutableArray *layers = [[NSMutableArray alloc]init]; 
     NSMutableDictionary *layer = [[NSMutableDictionary alloc]init]; 

     for (int i = 0; i<rows; i++) { 
      if ([[[mivne_shichva objectAtIndex:i]valueForKey:@"name"] isEqualToString:[[mivne_shichva objectAtIndex:i+1]valueForKey:@"name"]]) { 
       NSLog(@"name equals to name in i+1"); 
      } 
      [layer setValue:[[mivne_shichva objectAtIndex:i]valueForKey:@"name"] forKey:@"name"]; 
      [layer setValue:[[mivne_shichva objectAtIndex:i]valueForKey:@"minimum"] forKey:@"minimum"]; 
      [layer setValue:[[mivne_shichva objectAtIndex:i]valueForKey:@"maximum"] forKey:@"maximum"]; 

      [layers addObject:layer]; 

      NSLog(@"layers :::: %@",layers);    
     } 
+0

我相信你嘗試了一些東西,但它沒有奏效。你介意分享一下最接近你目標的最新嘗試嗎?我們會幫你做到這一點。 – dasblinkenlight

+0

是的,我試圖檢查索引「我」的對象是否等於對象在索引我+ 1,但它崩潰......超出界限(2)...說...我已將我的代碼添加到我的問題 –

+0

那是因爲當你計劃使用'i + 1'作爲索引表達式時,你的循環需要上升到'rows - 1',而不是'rows'。 – dasblinkenlight

回答

1

檢查這一項, 邏輯是

最終的結果將是一個‘詞典’ 的「二。 ctionary'鍵包含名稱爲'Layer 1' '字典'值包含'數組'。 '數組'包含'MinMax'的對象。

的MINMAX類:

@interface MinMax : NSObject 

@property(strong)NSString *minimum; 
@property(strong)NSString *maximum; 

@end 

MyClass類:

@interface MyClass : NSObject 

@property(strong) NSString *name; 
@property(strong) NSString *minimum; 
@property(strong) NSString *maximum; 

@end 

而且演示實現:

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     _finalDict=[NSMutableDictionary new]; 

     MyClass *obj1=[MyClass new]; 
     [email protected]"Layer 1"; 
     [email protected]"1"; 
     [email protected]"30"; 

     MyClass *obj2=[MyClass new]; 
     [email protected]"Layer 1"; 
     [email protected]"45"; 
     [email protected]"60"; 

     MyClass *obj3=[MyClass new]; 
     [email protected]"Layer 2"; 
     [email protected]"45"; 
     [email protected]"60"; 

     _fromServerArrays=[[NSMutableArray alloc]initWithObjects:obj1, obj2, obj3, nil]; 

    } 
    return self; 
} 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{ 

    for (MyClass *obj in _fromServerArrays) { 
     NSLog(@"From server : %@, %@, %@", obj.name, obj.minimum, obj.maximum); 
    } 


    for (MyClass *myClassObj in _fromServerArrays) { 
     MinMax *mmObj=[MinMax new]; 
     mmObj.minimum=myClassObj.minimum; 
     mmObj.maximum=myClassObj.maximum; 

     if ([_finalDict objectForKey:myClassObj.name]) { 
      NSMutableArray *getArray=[_finalDict objectForKey:myClassObj.name]; 
      [getArray addObject:mmObj]; 
     } 
     else{ 
      NSMutableArray *array=[NSMutableArray new]; 
      [array addObject:mmObj]; 
      [_finalDict setObject:array forKey:myClassObj.name]; 
     } 
    } 


    for (NSDictionary *dict in _finalDict) { 
     NSLog(@"%@",dict); 
     for (MinMax *mmObj in [_finalDict objectForKey:dict]) { 
      NSLog(@"%@, %@", mmObj.minimum, mmObj.maximum); 
     } 
    } 
} 

輸出:

From server : Layer 1, 1, 30 
From server : Layer 1, 45, 60 
From server : Layer 2, 45, 60 
Layer 1 
1, 30 
45, 60 
Layer 2 
45, 60 
+0

我已經嘗試過這種算法...我不知道如何實現它作爲工作代碼...: -/ –

+0

:D因此等待幾分鐘...我必須編碼... –

+0

YAY :)謝謝!! –

相關問題