2017-03-05 161 views
-1

我有一个包含字典的数组。在每个字典中再次包含字典数组。我想弄清楚具有特定价值的所有物体,如印度。 我试过NSpredicate。字典从字典数组中找出一个特定的值

{ 
Destination : [ 
       { 
        plan : [ 
          { 
           name : "India" 
          }, 
          { 
           name : "India" 
          } 
          ] 
         }, 
       { 
        plan : [ 
          { 
           name : "Germany" 
          }, 
          { 
           name : "Germany" 
          } 
          ] 
         } 
        ] 
       } 

的示例阵列本字典我的代码是

NSMutableArray * destinationArray = [[NSMutableArray alloc]init]; 
      [destinationArray addObject:[ResponseObject objectForKey:@"Destination"]]; 
      NSPredicate * predicate = [NSPredicate predicateWithFormat:@"name CONTAINS[cd] %@",@"India"]; 
      NSArray * filtered = [destinationArray filteredArrayUsingPredicate:predicate]; 
+0

你是否对'ResponseObject'阵列或单个对象的多个对象? –

+0

我在我的答案中的数组等于你的[[ResponseObject objectForKey:@“Destination”]',测试我的代码,你会知道你错在哪里。 –

回答

0
NSMutableArray* container = [NSMutableArray new]; 
for (NSMutableDictionary* d in firstArray) { 
    for (NSMutableDictionary* d2 in d[@"plan"]) { 
     [container addObject: [d2[@"name"] mutableCopy]; 
    } 

} 

我相信这会在你的代码做

0
NSPredicate * predicate = [NSPredicate predicateWithFormat:@"name CONTAINS[cd] %@",[[[ResponseObject objectAtIndex:i]objectForKey:@"destination"]objectForKey:@"name"]]; 

enter image description here

,当致电[[ResponseObject objectAtIndex:i]objectForKey:@"destination"]这里返回一个NSArray包含一些NSDictionary。当你致电objectForKey:@"name"时,它会向你发送一个错误,你确定你的代码是最新的吗?

这里是我的测试遵循你的数据结构,结果是最新的。

enter image description here

enter image description here

NSArray *array = @[@{@"name" : @"zhangsan", 
        @"age" : @"10", 
        @"result": @[ 
            @{@"res":@"123l"}, 
            @{@"res":@"789l"} 
           ] 
        }, 
        @{@"name" : @"lisi", 
        @"age" : @"11", 
        @"result": @[ 
            @{@"res":@"123l"}, 
            @{@"res":@"789l"} 
           ] 
        }, 
        @{@"name" : @"wangwu", 
        @"age" : @"12", 
        @"result": @[ 
            @{@"res":@"123l"}, 
            @{@"res":@"789l"} 
           ] 
        }]; 

NSString *preStr = @"res"; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K CONTAINS[c] %@",preStr, @"123"]; 
NSMutableArray *result = [NSMutableArray array]; 
for (NSDictionary *dict in array) { 
    NSArray *res = dict[@"result"]; 
    [result addObjectsFromArray:[res filteredArrayUsingPredicate:predicate]]; 
} 
NSLog(@"final result == %@",result); 
相关问题