objective-c - NSMutableArray 排序和分组内存优化

标签 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": "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"次会消耗时间和内存。

任何帮助表示感谢。

最佳答案

你能试试下面的代码吗?

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"itemID"  ascending:YES];
[itemArray sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]];

关于objective-c - NSMutableArray 排序和分组内存优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13895891/

相关文章:

iphone - 使用键存储数组并按输入顺序对它们进行排序的最佳方法

ios - 尝试从完成处理程序中的响应对象返回字符串

ios - substringToIndex 即使在修剪后也没有给出正确的输出

c++ - 写入大于系统内存的内存映射区域?

iphone - 为什么我的 UITableView 从 UITableViewStyleGrouped 更改为 UITableViewStylePlain

ios - 获取物体背后的颜色

iphone - 禁用 UIWebView 中的超链接

java - 使用Jedis的Redis中单个键占用的内存?

java - Kafka设置从主题读取的最大消息数

objective-c - 使用指针作为 NSMutableDictionary 的键的安全方法是什么?