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

时间:2019-07-13 22:08:15

标签: objective-c uitableview duplicates nsarray 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数据的一部分,已通过NSArray转换为JSONModel

如您所见,它们具有相同的名称和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;
}

1 个答案:

答案 0 :(得分:0)

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];
    }