0

我有一个带有 NSStrings 的 NSDictionary

一些 valueForKey:@"Key" 没有条目,所以它是 (null)

NSMutableString* addressDictionaryToString = [NSMutableString string];  // use mutable string!
for (NSDictionary* item in address) {     // use fast enumeration!
        [addressDictionaryToString appendFormat:@"%@, %@, %@, %@",
         [item objectForKey:@"Street"],         
         [item objectForKey:@"City"],
         [item objectForKey:@"State"],
         [item objectForKey:@"ZIP"]
         ];
    NSLog(@"MutableString: %@", addressDictionaryToString);
}

所以我想构建一个 NSMutableString 但过滤掉那些为空的键。有任何想法吗?

更新:::::

基本上我希望我的结果字符串看起来像

1 Infinite Loop, Cupertino, CA, 95014(如果所有字段都可用)

如果我想念那条街

加利福尼亚州库比蒂诺,95014

如果我错过了国家,那么

1 无限循环,库比蒂诺,95014

如果我只有状态,那么它应该打印

加州

(注意最后一个元素没有逗号)

4

2 回答 2

1

如何检查键是否有值?

NSMutableString * addressDictionaryToString = [NSMutableString string];
for (NSDictionary * item in address)
{
    if ([item objectForKey:@"Street"])
        [addressDictionaryToString appendFormat:@"%@, ", 
         [item objectForKey:@"Street"]];
    if ([item objectForKey:@"City"])
        [addressDictionaryToString appendFormat:@"%@, ", 
         [item objectForKey:@"City"]];
    if ([item objectForKey:@"State"])
        [addressDictionaryToString appendFormat:@"%@, ", 
         [item objectForKey:@"State"]];
    if ([item objectForKey:@"ZIP"])
        [addressDictionaryToString appendFormat:@"%@, ", 
         [item objectForKey:@"ZIP"]];
    NSLog(@"MutableString: %@", addressDictionaryToString);
}

问题是,在您的最后一个问题中,您说您的目标是创建一个 CSV 文件。如果您的行有不同数量的字段,并且没有可靠的方法来识别每个字段,那么它在技术上不是有效的 CSV。

相反,你可以试试这个:

NSMutableString * addressDictionaryToString = [NSMutableString string];
for (NSDictionary * item in address)
{
    [addressDictionaryToString appendFormat:@"%@,", 
     ([item objectForKey:@"Street"]) ? [item objectForKey:@"Street"] : @"" ];
    // ...
    NSLog(@"MutableString: %@", addressDictionaryToString);
}

它检查是否存在一个值,如果存在则插入该值,或者只是一个空字符串(导致“值、值、值...”)。还要记住逗号后面不应该有空格,所以我已经从这个例子中删除了它。

于 2010-06-24T14:05:50.920 回答
0

不完全确定您要做什么,但是:

NSDictionary *d=[NSDictionary dictionaryWithObject:[NSNull null] forKey:@"ns"];
NSString *n=[@"Steve " stringByAppendingFormat:@"%@",[d objectForKey:@"ns"]];
NSLog(@"%@",n);

... 印刷:

Steve <null>

如果键本身不存在,那么当您尝试获取不存在的键的值时,它将引发异常。在这种情况下,唯一的办法是在尝试使用它来检索值之前检查每个字典中的键。

于 2010-06-24T14:23:13.667 回答