1

NSArray 里面有 ItemObject。这个 ItemObject 不是基于 ItemID 分组的

json 的示例如下所示:您会注意到 itemIDs "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 是动态的,正如我解释的那样,可能有“N”个 itemId。

第 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 是预期的结果。但是使用 filterUsingPredicate "N" 次会耗费时间和内存。

任何,帮助赞赏。

4

2 回答 2

1

你能试试下面的代码吗?

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"itemID"  ascending:YES];
[itemArray sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]];
于 2012-12-15T20:39:38.650 回答
0

您可以将数据保存为 NSManagedObjects。然后你可以使用NSFetchedResultsController作为你的表的数据源(你设置一个排序描述符和一个节名键路径):

NSFetchedResultsController *controller = [[NSFetchedResultsController alloc]
        initWithFetchRequest:fetchRequest
        managedObjectContext:context
        sectionNameKeyPath:nil
        cacheName:nil];

您还可以设置批量大小(一次从数据库中获取的最大对象数)。

希望这可以帮助!

于 2012-12-15T21:13:48.293 回答