【发布时间】:2015-12-28 01:40:45
【问题描述】:
我正在获取两个JSONs 并将它们分别存储为NSArray 和NSDictionary。
这就是JSON 数据结构的样子
(
{
Cells = (
{
ValueName = "name";
Text = "John Appleseed";
},
{
"Option": {
"Text": "19"
},
ValueName = "age"
}, etc...
)
},
{
Cells = (
{
ValueName = "name";
Text = "John Appleseed";
},
{
ValueName = "age",
"Option": {
"Text": "19"
}
}, etc...
)
}
)
{
"map": {
"first": "name",
"second": "age"
}, etc...
}
两者具有需要交叉引用的值(因为一个包含所有数据 (allData),另一个包含所需数据的“映射”(mapData))。
如何将allData 的所有值与mapData 的所有值进行比较,同时尽可能记住简单性和记忆力?
一个很好的方法是使用containsObject 匹配[allData allValues] 和[mapData allValues],并返回一个NSArray 和匹配的object。唉,事实并非如此。该方法完美地说明了我希望实现的目标。
我最初的方法很慢,占用内存且丑陋(凭记忆写的):
NSArray *allData = [NSJSONSerialization JSONObjectWithData:allDataJSON options:kNilOptions error:&JSONSerializationError];
NSDictionary *mapData = [NSJSONSerialization JSONObjectWithData:mapDataJSON options:kNilOptions error:&JSONSerializationError];
NSMutableDictionary *resultData = [[NSMutableDictionary alloc] init];
for (int count = 0; count<allData.count; count++) {
id dataValue = [allData objectAtIndex:count];
for (id key in mapData) {
if ([[mapData objectForKey:key] containsObject:dataValue]) {
[resultData setObject:[dataValue objectForKey:@"value"] forKey:key]
}
}
}
能够引用匹配值的每个匹配项也很重要(正如我的方法中所做的那样)。
这不是基于意见的问题,因为优化和内存使用不是意见。
【问题讨论】:
-
除了原始 JSON 结果和
resultData您的方法不分配任何对象。那么,您想如何减少这种情况呢?降低内存使用的唯一方法是以 SAX 样式反序列化allDataJSON 并立即删除不匹配的项目。 -
示例数据有助于理解用例。
标签: ios objective-c json compare nsarray