我一直在使用以下内容从词典中删除数组:
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:
来创建两个不同的数组,一个用于“咳嗽”而另一个用于“头痛”?
答案 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
最终不是coughing
或headache
,则可以。另一方面,您也可以在找到新密钥时向ailmentsBySection
动态添加新密钥,而不是仅仅允许coughing
和headache
。