2012-12-18 42 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 :)谢谢!! –

相关问题