Objective c NSMutableArray通过内存优化进行排序和分组
NSArray中有ItemObject。此ItemObject不基于ItemID分组 json的示例如下所示: 您将注意到条目ID“a123”、“a124”。可以有n个ItemIDObjective c NSMutableArray通过内存优化进行排序和分组,objective-c,ios,memory,nsmutablearray,nsarray,Objective C,Ios,Memory,Nsmutablearray,Nsarray,NSArray中有ItemObject。此ItemObject不基于ItemID分组 json的示例如下所示: 您将注意到条目ID“a123”、“a124”。可以有n个ItemID [ { "ItemName": "John", "ItemID": "a123" }, { "ItemName": "Mary", "ItemID": "a124" }, { "ItemName":
[
{
"ItemName": "John",
"ItemID": "a123"
},
{
"ItemName": "Mary",
"ItemID": "a124"
},
{
"ItemName": "Larry",
"ItemID": "a123"
},
{
"ItemName": "Michel",
"ItemID": "a123"
},
{
"ItemName": "Jay",
"ItemID": "a124"
}
]
上述响应存储在NSArray中,如下所示:
NSMutableArray *itemArray=[[NSMutableArray alloc] init];
ItemObject *obj=[[ItemObject alloc] init];
obj.itemName=@"John";
obj.itemID=@"a123";
[itemArray addObject:obj]
.....
ItemObject *objN=[[ItemObject alloc] init];
objN.itemName=@"Jay";
objN.itemID=@"a124";
[itemArray addObject:objN].
这表明,如果JSON中有N个项,那么它将创建一个包含N个项的数组
以上项目在UItableView中正确显示
现在,如果您想对它们进行排序并将它们放入NSMutableArray组,那么什么是最佳的编码方式,占用的内存更少。[即排序+分组]
我正在努力实现以下目标:
NSMutableArray *itemArray=[[NSMutableArray alloc] init];
at index 0: NSArray with itemID "a123"
at index 1: NSArray with itemID "a124"
因为,可用的itemId是动态的,正如我所解释的,itemId的数量可以是“N”
步骤1:
因此,我首先需要找到可用的itemId
步骤2:
NSMutableArray *myArray=[[NSMutableArray alloc] init];
for(NSString *itemID in itemIDS){
NSArray *itemsForID=[itemArray filterUsingPredicate:[NSPredicate predicateWithFormat:"itemID MATCHES %@",itemID]];
[myArray addObject:itemsForID];
}
myArray是预期的结果。
但是多次使用FilterSingPredicate“N”将耗费时间和内存
谢谢您的帮助。您能试试下面的代码吗
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"itemID" ascending:YES];
[itemArray sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]];
你能试试下面的代码吗
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"itemID" ascending:YES];
[itemArray sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]];
您可以将数据持久化为NSManagedObjects。然后,您可以使用as数据源作为表的数据源(设置排序描述符和节名键路径): 您还可以设置批大小(一次从数据库中获取的最大对象数)
希望这有帮助 您可以将数据持久化为NSManagedObject。然后,您可以使用as数据源作为表的数据源(设置排序描述符和节名键路径): 您还可以设置批大小(一次从数据库中获取的最大对象数)
希望这有帮助 回答不错,但它应该将结果分配给myArray。在我的代码中包含此代码段会很好。但是,我正在寻找内存和时间优化。回答不错,但它应该将结果分配给myArray。在我的代码中包含此代码段会很好。但是,我正在寻找内存和时间优化。您是否可以控制JSON中的itemID,或者是否需要添加新对象并为其分配下一个可用ID?就分组而言,您是否希望最终结构是一个数组数组,其中每个内部数组的对象都具有相同的itemID?这取决于您将如何使用生成的对象,你可以考虑使用一个字典,其中键是ItID的,并且值将是ITITID与该键匹配的所有ITEM对象的数组。@ ReldMar我对ItID ID没有任何控制。他们在答复中得到了答复。最后一个结构是各自ID的数组中的数组。好吧,那个结构将非常低效。如果您想提高效率,那么使用itemID作为键的字典将是一个更好的选择。您是否可以控制来自JSON的itemID,或者您是否需要添加新对象并为它们分配下一个可用的ID?就分组而言,您是否希望最终结构是一个数组数组,其中每个内部数组的对象都具有相同的itemID?这取决于您将如何使用生成的对象,你可以考虑使用一个字典,其中键是ItID的,并且值将是ITITID与该键匹配的所有ITEM对象的数组。@ ReldMar我对ItID ID没有任何控制。他们在答复中得到了答复。最后一个结构是各自ID的数组中的数组。好吧,那个结构将非常低效。如果您想提高效率,那么使用itemID作为键的字典将是更好的选择。