使用多个单词从plist NSString添加dicts

时间:2011-11-06 20:22:48

标签: iphone objective-c xcode nsarray

我一直在使用以下内容从词典中删除数组:

self.cough = [NSMutableArray arrayWithCapacity:[ailments count]];
NSDictionary* dict;
for (dict in ailments)
    if ([[dict valueForKey:@"section"]isEqualToString:@"coughing"])[cough addObject:dict];

plist的格式为:

section:    coughing
name:       Common Cold

我遇到的麻烦,我怀疑它很简单,如果我想在不同的部分使用“普通感冒”,比如“头痛”,我可以为新的部分创建另一个疾病对象,但它通过显示2个Common Cold条目(来自“Coughing”和“Headache”)来弄乱我的搜索结果。

我想做的是:

section:    coughing, headache
name:       Common Cold

我将使用什么而不是isEqualToString:来创建两个不同的数组,一个用于“咳嗽”而另一个用于“头痛”?

2 个答案:

答案 0 :(得分:0)

您似乎手动检查了部分类型。如果你想继续这种方式,你真正需要做的就是检查并查看section string是否包含你正在评估的特定部分的子字符串:

How do I check if a string contains another string in Objective-C?

然而,不是静态地定义您正在寻找的部分名称,而是考虑尝试从plist动态获取部分名称/类型,然后排序到这些部分,这可能会让您受益。

答案 1 :(得分:0)

NSMutableDictionary *ailmentsBySection = [NSMutableDictionary dictionary];
[ailmentsBySection addObject:[NSMutableArray array] forKey:@"coughing"];
[ailmentsBySection addObject:[NSMutableArray array] forKey:@"headache"];
NSCharacterSet *whitespace = [NSCharacterSet whitespaceCharacterSet];
for (NSDictionary *ailment in ailments) {
    NSString *sections = [ailment objectForKey:@"section"];
    for (NSString *section in [sections componentsSeparatedByString:@","]) {
        section = [section stringByTrimmingCharactersInSet:whitespace];
        [[ailmentsBySection objectForKey:section] addObject:ailment];
    }
}

请注意,将任何邮件发送到nil是合法的,因此如果section最终不是coughingheadache,则可以。另一方面,您也可以在找到新密钥时向ailmentsBySection动态添加新密钥,而不是仅仅允许coughingheadache