Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSMutableArray通过内存优化进行排序和分组_Objective C_Ios_Memory_Nsmutablearray_Nsarray - Fatal编程技术网

Objective c NSMutableArray通过内存优化进行排序和分组

Objective 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":

NSArray中有ItemObject。此ItemObject不基于ItemID分组

json的示例如下所示: 您将注意到条目ID“a123”、“a124”。可以有n个ItemID

[
    {
        "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作为键的字典将是更好的选择。