我的要求是确定通讯录中的更改(自上次打开申请以来哪些联系人和哪些字段已更改。
现在我有两个NSArrays作为arrSavedContacts(包含以前的地址簿联系人)和arrContacts(当前地址簿联系人)。这就是两个数组的样子
arrSavedContacts
{
firstName = FirstName Changed;
id = 224;
lastName = Udaha;
phones = (
{
label = Mobile;
value = "123456789";
}
);
},
{
firstName = Chandrananda;
id = 225;
lastName = "";
phones = (
{
label = Mobile;
value = "345678912";
}
);
},
arrContacts
<meta name="viewport" content="initial-scale=1">
作为上面两个数组,我们可以注意到两个更改,第三个项目被删除,firstName在第一个项目中被更改。
由于我们可以在地址簿中包含数千个项目,我的问题是,比较这两个数组并检测更改的项目(删除,添加,更改内部字段)的最佳和最佳方式是什么?
非常感谢代码示例
答案 0 :(得分:0)
继续 rmaddy 所建议的,在词典字典中使用数据可以根据唯一ID轻松找到第一个位置的删除。例如,这就是你的基本词典的样子:
{ 224 = {
firstName = Gayan;
id = 224;
lastName = Udaha;
phones = (
{
label = Mobile;
value = "123456789";
}
);
}
225 = {
firstName = Chandrananda;
id = 225;
lastName = "";
phones = (
{
label = Mobile;
value = "234567891";
}
);
}
}
现在,一旦您的数据设置正确,您可以在NSDictionary
上添加类别并实施以下方法:
- (NSArray*)changedKeysIn:(NSDictionary*)iAnotherDict {
NSMutableArray *changedKeys = [NSMutableArray array];
for (id key in self) {
if(![[self objectForKey:key] isEqual:[iAnotherDict objectForKey:key]])
[changedKeys addObject:key];
}
return changedKeys;
}
然后简单地称之为:
[baseDict changedKeysIn:anotherDict];