【发布时间】:2015-09-19 03:46:44
【问题描述】:
我的要求是确定地址簿中的更改(自上次打开应用程序以来,哪些联系人和哪些字段发生了更改。
现在我有两个 NSArrays 作为 arrSavedContacts(包含以前的通讯录联系人)和 arrContacts(当前通讯录联系人)。这就是两个数组的样子
arrSavedContacts
{
firstName = Gayan;
id = 224;
lastName = Udaha;
phones = (
{
label = Mobile;
value = "123456789";
}
);
},
{
firstName = Chandrananda;
id = 225;
lastName = "";
phones = (
{
label = Mobile;
value = "234567891";
}
);
},
{
firstName = Joe;
id = 228;
lastName = B8;
phones = (
{
label = Mobile;
value = "345678912";
}
);
},
arrContacts
{
firstName = FirstName Changed;
id = 224;
lastName = Udaha;
phones = (
{
label = Mobile;
value = "123456789";
}
);
},
{
firstName = Chandrananda;
id = 225;
lastName = "";
phones = (
{
label = Mobile;
value = "345678912";
}
);
},
作为上面的两个数组,我们可以注意到两个变化,第 3 项被删除,第 1 项中的 firstName 被改变。
由于地址簿中可以有数千个项目,我的问题是,比较这两个数组并检测更改的项目(删除、添加、内部字段的更改)的最佳和最佳方法是什么?
非常感谢一个代码示例
【问题讨论】:
-
你的数据结构几乎不可能做你想做的事。你真的需要一个字典而不是字典数组。外部字典应该为每个联系人条目键入某种唯一的 id。然后您可以通过键关联两个(保存和更改的)字典。然后你可以比较每个对应的内部字典来寻找变化。
-
@rmaddy 感谢您的想法,如果您能展示一些示例,我们将不胜感激
-
以
arrSavedContacts开头。你有一个字典数组。相反,将所有字典放在字典而不是数组中。您现有的字典将是字典中的值,每个联系人的某种唯一 ID 将是其键。现在对arrContacts执行相同的操作。现在每个联系人将在两组数据中具有相同的唯一 ID。
标签: ios objective-c nsarray nsdictionary nspredicate