Iphone 在日志中显示NSMutableDictionary中的每个对象

Iphone 在日志中显示NSMutableDictionary中的每个对象,iphone,xcode,Iphone,Xcode,这里有一个新手问题 我有一本易变的字典 日志中的哪个部分如下所示: "test1" = "5"; "test2" = "78"; "test3" = "343"; "test4" = "3"; for (int i =0; i<[dict count]; i++){ NSString *str=[dict objectForKey:[NSString stringWithFormat:@"test%d",i+1]]; NSLog(@"%@",str); }

这里有一个新手问题

我有一本易变的字典

日志中的哪个部分如下所示:

"test1" = "5";
"test2" = "78";
"test3" = "343";
"test4" = "3";
for (int i =0; i<[dict count]; i++){
        NSString *str=[dict objectForKey:[NSString stringWithFormat:@"test%d",i+1]];
        NSLog(@"%@",str);
}
我需要自己打印每个数字,但我在数组和句子方面非常差

我的想法是:

    for (dict) {
    double number = [[[dict allKeys] objectAtIndex:0] doubleValue];

    NSLog(@"Number: %f",number); 

}
我希望在每行的日志中都是这样:

Number: 5
Number: 78
Number: 343
Number: 3
但很明显,我的“FOR”方法是胡言乱语


任何帮助都将不胜感激。

您可以使用快速枚举
来执行此操作。它迭代字典中的所有键:

for (NSString *key in dict) {
    double number = [[dict objectForKey:key] doubleValue];
    NSLog(@"Number: %f", number);
}

为此,可以使用快速枚举
for
。它迭代字典中的所有键:

for (NSString *key in dict) {
    double number = [[dict objectForKey:key] doubleValue];
    NSLog(@"Number: %f", number);
}

如果您只想记录这些数字,请尝试以下操作:

for (NSString *number in dict) {
    NSLog(@"Number: %@",[dict objectForKey:number]);
}

如果您只想记录这些数字,请尝试以下操作:

for (NSString *number in dict) {
    NSLog(@"Number: %@",[dict objectForKey:number]);
}

第一个答案创建了两个名为“number”的对象。相反,你应该:

for (NSString *key in dict) {
    NSLog(@"Number as double: %f", [[dict objectForKey:key] doubleValue]);
    NSLog(@"Number as string: %@", [dict objectForKey:key]);
}

快速枚举的好处在于它可以为您创建对象(并自动释放它们)。
键是在NSDictionary中快速枚举时提供给您的。因为你现在有了钥匙,你只需要抓住objectAtKey。在您的情况下,它是字典中的一个字符串,因此您必须将其转换为double(或您需要的任何类型),或者作为字符串输出。我为上述两种情况添加了示例。祝你好运

第一个答案创建了两个名为“number”的对象。相反,你应该:

for (NSString *key in dict) {
    NSLog(@"Number as double: %f", [[dict objectForKey:key] doubleValue]);
    NSLog(@"Number as string: %@", [dict objectForKey:key]);
}
快速枚举的好处在于它可以为您创建对象(并自动释放它们)。
键是在NSDictionary中快速枚举时提供给您的。因为你现在有了钥匙,你只需要抓住objectAtKey。在您的情况下,它是字典中的一个字符串,因此您必须将其转换为double(或您需要的任何类型),或者作为字符串输出。我为上述两种情况添加了示例。祝你好运

使用块:

NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                            @"5",   @"test1",
                            @"78",  @"test2",
                            @"343", @"test3",
                            @"3",   @"test4",
                            nil];

[dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    NSLog(@"Number: %@", obj);
}];
NSLog输出:

Number: 5
Number: 3
Number: 343
Number: 78
使用块:

NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                            @"5",   @"test1",
                            @"78",  @"test2",
                            @"343", @"test3",
                            @"3",   @"test4",
                            nil];

[dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    NSLog(@"Number: %@", obj);
}];
NSLog输出:

Number: 5
Number: 3
Number: 343
Number: 78

如前所述,在这些情况下,快速枚举更可取,但您也可以这样做:

"test1" = "5";
"test2" = "78";
"test3" = "343";
"test4" = "3";
for (int i =0; i<[dict count]; i++){
        NSString *str=[dict objectForKey:[NSString stringWithFormat:@"test%d",i+1]];
        NSLog(@"%@",str);
}

for(int i=0;i如前所述,在这些情况下,最好使用快速枚举,但您也可以这样做:

"test1" = "5";
"test2" = "78";
"test3" = "343";
"test4" = "3";
for (int i =0; i<[dict count]; i++){
        NSString *str=[dict objectForKey:[NSString stringWithFormat:@"test%d",i+1]];
        NSLog(@"%@",str);
}

for(int i=0;iThat给我“发送”Double到不兼容类型“id”的参数@Luiz我认为这些值​​他发布的是字符串,而不是数字。@JohnSmith我对我的代码做了一个更正:将fom
number
键的名称更改为
key
,因为
number
与循环中的
double
变量冲突。@Mat你说得对,这些值确实是字符串,但他想将它们打印成flo格式ats使用
NSLog
。这给了我“发送”双精度到不兼容类型“id”的参数@Luiz我认为​​他发布的是字符串,而不是数字。@JohnSmith我对我的代码做了一个更正:将fom
number
键的名称更改为
key
,因为
number
与循环中的
double
变量冲突。@Mat你说得对,这些值确实是字符串,但他想将它们打印成flo格式ats使用
NSLog