如何从用 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];
}
我使用 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];
}