在 NSArray (iOS) 中查找包含特定值的 NSDictionary

Find NSDictionary containing specific value in NSArray (iOS)

我有多个 NSDictionaryNSArray("address_components")。每个 NSDictionary 包含一个 NSArray("types") 个 NSString 个值。像这样..

"address_components" =         (
{
    "long_name" = "Perumbavoor Puthencruz Road";
    "short_name" = "Perumbavoor Puthencruz Rd";
    types =                 (
        route
    );
},
{
    "long_name" = Vengola;
    "short_name" = Vengola;
    types =                 (
        locality,
        political
    );
},
{
    "long_name" = Ernakulam;
    "short_name" = EKM;
    types =                 (
        "administrative_area_level_2",
        political
    );
},
{
    "long_name" = Kerala;
    "short_name" = KL;
    types =                 (
        "administrative_area_level_1",
        political
    );
},
{
    "long_name" = India;
    "short_name" = IN;
    types =                 (
        country,
        political
    );
},
{
    "long_name" = 683556;
    "short_name" = 683556;
    types =                 (
        "postal_code"
    );
}
);

如何获取包含字符串 "locality" 的数组的字典。在这个例子中我想得到字典..

{
  "long_name" = Vengola;
  "short_name" = Vengola;
   types =(
      locality,
      political
   );
}

谢谢:)

您可以检查数组是否包含字典或机器人:

for(int i=0; i<[arr count];i++){
if([arr[i] isKindOfClass:[NSDictionary Class]]){
NSDictionary *dic=arr[i];
NSLog("%@",dic);
}
}

你需要predicate这样的地址数组

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY types CONTAINS[c] %@", @"locality"];
NSArray *arr = [yourArray filteredArrayUsingPredicate:predicate];

请使用此代码

NSArray *myArray = [yourAddressDict valueForKey:"address_components"];


 NSMutableArray *NewArray = [NSMutableArray array];

    for (NSDictionary *ob in myArray) {
        NSArray *arraylocality = [ob valueForKey:@"types"];
         BOOL isthere=  [arraylocality containsObject:@"locality"];
        if (isthere) {
            [NewArray addObject:ob];
        }

    }

 NSLog(@"%@",NewArray);

给你:

NSArray *list = @[
              @{
                  @"long_name" : @"Perumbavoor Puthencruz Road",
                  @"short_name" : @"Perumbavoor Puthencruz Rd",
                  @"types" : @[@"route"]
                  },
              @{
                    @"long_name" : @"Vengola",
                    @"short_name" : @"Vengola",
                    @"types" : @[@"locality", @"political"]
                    },
              @{
                  @"long_name" : @"Ernakulam",
                  @"short_name" : @"EKM",
                  @"types" :                 @[
                          @"administrative_area_level_2",
                          @"political"]
                  }
              ];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.types CONTAINS 'locality'"];
NSArray *result = [list filteredArrayUsingPredicate:predicate];
NSLog(@"result: %@", result);

结果:

{
        "long_name" = Vengola;
        "short_name" = Vengola;
        types =         (
            locality,
            political
        );
    }