nsdictionary获取值,如何从NSArray中的每个NSDictionary获取特定键的所有值?

I have an array which contains dictionary objects. In each dictionary the key are common. Now I want to get all the values of that key. I have got these values with iteration, but I am looking for some straight forward way or a default method which does this job.

Can you please help me to get one default method which serves the purpose? Thanks.

Data Structure is like this:

Match

Football

Stadium

XXXXX

Match

HOCKY

Stadium

XXXXX

I am doing this now:

NSMutableArray * matches = [[NSMutableArray alloc] init];

for (int i = 0; i< myArray.count; i++){

[matches insertObject:[[myArray objectAtIndex:i] objectForKey:@"Match"] atIndex:i];

}

[matchDataArray addObjectsFromArray:matches];

It gives me correct answer. But I don't want to do this iteration. I want a method which will return me all values of "Match" key from all indexes of array and save in another array at once. newly created array will have only the values of Match key from all indexes of array.

Is this possible??

解决方案

There's a neat trick with key-value coding that does it:

NSArray *matches = [myArray valueForKey: @"Match"];

Here is an example in action:

NSArray *anArray = @[

@{@"aWord" : @"I"},

@{@"aWord" : @"have"},

@{@"aWord" : @"an"},

@{@"aWord" : @"array"},

@{@"aWord" : @"which"},

@{@"aWord" : @"contains"},

@{@"aWord" : @"dictionary"},

@{@"aWord" : @"objects."},

@{@"aWord" : @"Etc."},

];

NSArray *aWordArray = [anArray valueForKey:@"aWord"];

After this last line, aWordArray will contain the words in the same order as in the original array of dictionaries.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要获取字典无限嵌套字典所有的,可以使用递归算法来遍历所有的对。 下面是一个示例的Objective-C代码,可以获取一个字典所有的: ```Objective-C - (NSArray *)allValuesInDictionary:(NSDictionary *)dict { NSMutableArray *allValues = [NSMutableArray array]; for (id key in dict) { id value = dict[key]; if ([value isKindOfClass:[NSDictionary class]]) { NSArray *nestedValues = [self allValuesInDictionary:value]; [allValues addObjectsFromArray:nestedValues]; } else { [allValues addObject:value]; } } return [NSArray arrayWithArray:allValues]; } ``` 这个方法接受一个字典作为参数,返回一个包含所有的数组。方法首先创建一个可变数组来保存所有,然后遍历字典的所有对。 对于每个对,如果是一个字典,那么递归地调用 `allValuesInDictionary:` 方法来获取嵌套字典的所有,并将其添加到 `allValues` 数组。否则,如果不是字典,那么直接将其添加到 `allValues` 数组。 最后,方法返回一个不可变的 `NSArray` 对象,其包含所有的。 ### 回答2: 在Objective-C,要获取一个字典的所有,无论字典是否有嵌套,我们可以使用递归来实现。以下是一个简单的示例来演示如何获取一个字典的所有: 首先,定义一个方法来获取字典的所有: ``` - (NSArray *)getAllValuesFromDictionary:(NSDictionary *)dictionary { NSMutableArray *valuesArray = [NSMutableArray array]; [self getValuesFromArray:valuesArray withDictionary:dictionary]; return [valuesArray copy]; } ``` 接下来,我们实现递归方法来遍历字典的所有对: ``` - (void)getValuesFromArray:(NSMutableArray *)valuesArray withDictionary:(NSDictionary *)dictionary { for (id value in [dictionary allValues]) { if ([value isKindOfClass:[NSDictionary class]]) { [self getValuesFromArray:valuesArray withDictionary:value]; } else { [valuesArray addObject:value]; } } } ``` 在上面的代码,我们首先遍历字典的所有,并检查每个的类型。如果是另一个字典类型,则递归地调用`getValuesFromArray:withDictionary:`方法,以继续遍历内部字典。否则,如果不是字典类型,则将其添加到`valuesArray`。 最后,我们可以使用以下代码调用`getAllValuesFromDictionary:`方法来获取字典的所有: ``` NSDictionary *nestedDictionary = @{@"key1": @{@"nestedKey1": @"value1"}, @"key2": @{@"nestedKey2": @"value2"}}; NSArray *allValues = [self getAllValuesFromDictionary:nestedDictionary]; NSLog(@"%@", allValues); ``` 输出结果将会是包含所有的数组: ``` ( value1, value2 ) ``` 以上就是使用Objective-C实现获取字典所有的方法,无论字典是否有嵌套。 ### 回答3: 如果字典是无限嵌套的,我们可以使用递归的方法来获取所有的。 首先,我们可以创建一个方法,接受一个字典作为参数,并返回一个包含所有的数组。在方法,我们可以使用for-in循环遍历字典的所有对。 对于每个对,如果是字典类型,那么我们可以通过递归调用我们的方法来获取字典内部的所有,并将其添加到结果数组。 如果不是字典类型,那么我们可以直接将其添加到结果数组。 当方法遍历完所有的对后,我们可以返回结果数组。 以下是一个示例实现: ```objc - (NSArray *)getAllValuesFromDictionary:(NSDictionary *)dictionary { NSMutableArray *result = [NSMutableArray array]; for (id key in dictionary) { id value = dictionary[key]; if ([value isKindOfClass:[NSDictionary class]]) { NSArray *nestedValues = [self getAllValuesFromDictionary:value]; [result addObjectsFromArray:nestedValues]; } else { [result addObject:value]; } } return [result copy]; } ``` 使用示例: ```objc NSDictionary *nestedDictionary = @{ @"key1": @"value1", @"key2": @{@"key3": @{@"key4": @"value2"}}, @"key5": @{@"key6": @"value3"} }; NSArray *allValues = [self getAllValuesFromDictionary:nestedDictionary]; NSLog(@"%@", allValues); // 输出: [@"value1", @"value2", @"value3"] ``` 通过递归方法,我们可以从无限嵌套的字典获取到所有的,并将其存储在一个数组

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值