如何从用 JSONModel 编写的 NSArray 中删除重复数据?

How to remove duplicates data from NSArray written with JSONModel?

我使用 JSONModel 解析 json 并将其转换为 NSArray 以便在 UITableView 中使用它。

"<RSTweakItem> \n   [name]: WhatAboutThis\n   [version]: 1.2\n   [packageID]: com.peterdev.whatabouthis\n</RSTweakItem>",
"<RSTweakItem> \n   [name]: WhatAboutThis\n   [version]: 1.2.1\n   [packageID]: com.peterdev.whatabouthis\n</RSTweakItem>"

这是 json 数据用 JSONModel 转换成 NSArray 的部分。

如您所见,它们具有相同的名称和 packageID,但版本不同。

所以我想检查packageID确定是同一个包,然后去掉旧版本的数据,只留下最新版本的数据。

这就是我用数据设置 UITableView 的方式。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    RSTweakCell *cell = [tableView dequeueReusableCellWithIdentifier:@"RSTweakCell" forIndexPath:indexPath];

    RSTweakItem *model = self.listTweak[indexPath.row];

    cell.textLabel.text = model.name;
    cell.detailTextLabel.text = model.version;
    cell.packageID = model.packageID;

    return cell;
}
NSArray<RSTweakItem> *models = @[];//parse from json
    NSMutableArray *packageIDs = [[models valueForKey:@"packageID"] mutableCopy];//get all packageIDs
    NSMutableArray *newModels= [NSMutableArray new];//for unique last versions of RSTweakItem
    while (packageIDs.count > 0) {
        NSString *pID = packageIDs.firstObject;
        //get all objects packageIDs equal pID
        NSArray *filteredAray = [models filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF.packageID like  %@", pID]];
        if(filteredAray.count  > 0) {
//            sort to get lates version
            NSArray *sorteArray = [filteredAray sortedArrayUsingComparator:^NSComparisonResult(RSTweakItem *obj1, RSTweakItem *obj2) {
                return [obj1.version compare:obj2.version];
            }];
            [newModels addObject:sorteArray.lastObject];
        }
        [packageIDs removeObject:pID];
    }