想从NSDictionary获得关键价值

时间:2013-11-28 11:52:07

标签: ios nsdictionary

我想获取数组中的所有键值。我在这里使用了关键字allKeysForObject。在使用allKeysForObject时,我在括号内得到了值。我想存储没有括号的值。 这是我的代码:

dict = [[NSMutableDictionary alloc]init];

[dict setValue:@"Hai" forKey:@"1"];
[dict setValue:@"lrd" forKey:@"2"];
NSArray *keys = [dict allKeys];
NSMutableArray *countryArray = [[NSMutableArray alloc]init];
NSMutableArray *keyObjects = [[NSMutableArray alloc]init];


for(NSString* key in keys) {
    NSString *obj = [dict objectForKey:key];
    [countryArray addObject:obj];

}
for (int i =0; i < [countryArray count]; i++) {
    [keyObjects addObject:[dict allKeysForObject: [countryArray objectAtIndex:i]]];
}

NSLog(@"%@",[keyObjects objectAtIndex:0]);

NSLog值为:

2013-11-28 17:12:48.400 Help[6775:c07] (
    1
)

提前致谢。

4 个答案:

答案 0 :(得分:4)

替换:

NSLog(@"%@",[keyObjects objectAtIndex:0]);

使用:

NSLog(@"%@",[keyObjects objectAtIndex:0][0]);

您正在keyObjects中存储由allKeysForObject:返回的值NSArray

答案 1 :(得分:1)

而不是使用loopNSDictionary获取所有关键值,使用- (NSArray *)allKeys; 这样做的方法。使用给定的方法总是好的,而不是编写我们自己的代码来实现相同的方法。 所以用以下代码替换for loop ......

keyObjects = [[dict allKeys]mutableCopy]; // mutableCopy because I think you want it mutable as your array is mutable.

修改

AFA您的代码问题,您正在获得括号,因为您将keyObjects数组中的所有键存储为数组,这就是为什么您可以在日志语句中看到那些括号。这是因为allKeysForObject方法返回与给定对象相关的键数组。 如果你想在这里以你的方式完成它就是......

for (int i =0; i < [countryArray count]; i++) {
    [keyObjects addObject:[dict allKeysForObject: [[countryArray objectAtIndex:i]0]]];
}

答案 2 :(得分:1)

您将使用 [dict allValues] 获取 NSDictionary 中的所有值。你不需要手动迭代数组

dict = [[NSMutableDictionary alloc]init];

[dict setValue:@"Hai" forKey:@"1"];
[dict setValue:@"lrd" forKey:@"2"];
NSMutableArray *countryArray = [[dict allValues] mutableCopy];
NSMutableArray *keyObjects = [[NSMutableArray alloc]init];


for (int i =0; i < [countryArray count]; i++) {
    [keyObjects addObject:[dict  allKeysForObject: [countryArray objectAtIndex:i]]];
}

NSLog(@"%@",[keyObjects objectAtIndex:0][0]);

答案 3 :(得分:0)

NSLog - ing:

每当你看到(...)时,它就是数组。

每当你看到{...}时,它就是字典。

因此,在您的情况下,它显示为(1),因此这是一个包含一个对象的数组。

因此,您需要通过一个级别来检索它。

NSLog(@"%@",[[keyObjects objectAtIndex:0] objectAtIndex:0]); //or
NSLog(@"%@",[keyObjects objectAtIndex:0][0]);