如何使用包含某些键/值的字典填充数组

时间:2013-09-17 00:35:38

标签: ios arrays dictionary

我目前正在使用plist文件,但打算在后端最终构建时切换到json。所以目前我的plist是一个包含一堆字典的数组。

我想使用此信息创建一个只包含具有特定值的字典的新数组。

例如。我的plist包含一堆像这样的位置:
键:位置值:示例地名在这里
key:类型值:室内

我想构建一个只包含“室内”设置为类型值的数组。 然后可能是第二个包含所有“户外”位置的。

这样做的最佳方式是什么,或者我可以直接进入某种教程。

感谢。

2 个答案:

答案 0 :(得分:1)

您真正需要做的就是将数组排序为两个数组。我见过的直接方法不会为你做这件事。我的建议是在数组上使用快速枚举,并有条件地将其分成两个新数组。

NSMutableArray *locations = [[NSMutableArray alloc] init];
NSMutableArray *type = [[NSMutableArray alloc] init];

for (NSDictionary *dict in MyPlistArray) {
    if ([dict valueForKey:@"locationKey"]) {
        [locations addObject:dict];
    } else if ([dict valueForKey:@"typeKey"]) {
        [type addObject:dict];
    }
}

您可能需要使用不同的方法来确定要放入每个数组的键,但是您可以获得一般的想法。

此外,我假设您希望字典数组继续存在,因此您可以将它们设置为属性而不是局部变量。

答案 1 :(得分:1)

只需遍历您的数组并将符合条件的词典添加到新数组中。

NSMutableArray *arrayIndoor = [NSMutableArray array];
NSMutableArray *arrayOutdoor = [NSMutableArray array];
NSString *type;
for (NSDictionary *dict in arrayPList) {
    type = [dict objectForKey:@"type"];
    if ([type isEqualToString:@"indoor"]) 
        [arrayIndoor addObject:dict];
    else if ([type isEqualToString:@"indoor"]) 
        [arrayOutdoor addObject:dict];
}