【发布时间】:2013-10-14 08:02:42
【问题描述】:
有两个文件。让我们称他们为fileOne 和fileTwo
每个都有几个具有相同名称的 NSMutableDictionary 属性。列举几个:
@property (retain, nonatomic) NSMutableDictionary * lunchStartTimeObject;
@property (retain, nonatomic) NSMutableDictionary * lunchLocationNameObject;
@property (retain, nonatomic) NSMutableDictionary * lunchLocationAddressObject;
@property (retain, nonatomic) NSMutableDictionary * activity1NameObject;
@property (retain, nonatomic) NSMutableDictionary * activity1StartTimeObject;
@property (retain, nonatomic) NSMutableDictionary * activity1LocationNameObject;
@property (retain, nonatomic) NSMutableDictionary * activity1CommentsFieldObject;
@property (retain, nonatomic) NSMutableDictionary * activity1LocationAddressObject;
@property (retain, nonatomic) NSMutableDictionary * activity2NameObject;
@property (retain, nonatomic) NSMutableDictionary * activity2StartTimeObject;
@property (retain, nonatomic) NSMutableDictionary * activity2LocationNameObject;
@property (retain, nonatomic) NSMutableDictionary * activity2CommentsFieldObject;
@property (retain, nonatomic) NSMutableDictionary * activity2LocationAddressObject;
我想通过调用以下方法(或类似方法)来比较两个文件中同名的字典:
-(NSMutableDictionary *)cellColorForChanges:(NSMutableDictionary *)newdictionary :(NSMutableDictionary *)oldDictionary;
{
if(![newdictionary isEqualToDictionary:oldDictionary])
{
[newdictionary setValue:@"UIColor yellowColor" forKey:@"cellColor"];
}
return newdictionary;
}
我试图避免手动为每个 NSMutableDictionary 编写代码。有没有办法避免以下情况:
if(![fileOne.lunchStartTimeObject isEqualToDictionary:fileTwo.lunchStartTimeObject])
{
fileOne.lunchStartTimeObject setValue:@"UIColor yellowColor" forKey:@"cellColor"];
}
我无法找出完成上述任务的最有效方法。是否有可能将每个字典发送到一个方法并取回字典(如果它不相等,则用另一个键更新)?或者我试图避免的是不可避免的?
【问题讨论】:
-
好吧,你最终必须比较字典。值得庆幸的是, isEqualToDictionary 会进行逐项比较,因此您不必编写代码。当然,您可以通过将字典放入数组并编写代码来遍历数组并进行比较来避免一些额外的编码,而不必为每个字典编写单独的比较。但是,这在执行方面不会更“有效”。您也可以先比较散列值,知道不匹配的散列意味着不相等。但这只有在大多数不匹配时才会得到回报——你仍然需要比较以确保“相等”。
标签: objective-c data-structures nsmutablearray