Ios 如何从两个不同的数组中找到公共对象并打印另一个对象?
我有2个阵列从2个不同的API接收数据 预订阵列 选定服务阵列 我想将上述两个数组与第一个数组中的“服务”键和第二个数组中的“sub_cat_id”进行比较,最后打印包含车辆的公共服务id的每单位价格 示例-5923F21C2279518A1661CB095923F22D2279513F1861CB09在第一个数组中找到的ID,因此从第二个数组-30,45打印两个ID的每单位价格 有什么建议吗?(如果任何代码片段需要回答此问题,请在评论中提及,我将用所需代码编辑并更新此问题Ios 如何从两个不同的数组中找到公共对象并打印另一个对象?,ios,objective-c,nsarray,Ios,Objective C,Nsarray,我有2个阵列从2个不同的API接收数据 预订阵列 选定服务阵列 我想将上述两个数组与第一个数组中的“服务”键和第二个数组中的“sub_cat_id”进行比较,最后打印包含车辆的公共服务id的每单位价格 示例-5923F21C2279518A1661CB095923F22D2279513F1861CB09在第一个数组中找到的ID,因此从第二个数组-30,45打印两个ID的每单位价格 有什么建议吗?(如果任何代码片段需要回答此问题,请在评论中提及,我将用所需代码编辑并更新此问题 This is ho
This is how I get the second array from the server
-(void)getServiceTypes
{
NSDictionary *queryParams;
queryParams = @{
@"ent_sess_token":flStrForStr([[NSUserDefaults standardUserDefaults] objectForKey:KDAcheckUserSessionToken]),
@"ent_dev_id":flStrForStr([[NSUserDefaults standardUserDefaults] objectForKey:kPMDDeviceIdKey]),
@"ent_catid":_dictAppointmentDetails[@"cat_id"]
};
NetworkHandler *handler = [NetworkHandler sharedInstance];
[handler composeRequestWithMethod:@"getSubCategory"
paramas:queryParams
onComplition:^(BOOL succeeded, NSDictionary *response) {
if (succeeded) {
[self getServiceTypesResponse:response];
}
}];
NSLog(@"param%@",queryParams);
}
-(void)getServiceTypesResponse:(NSDictionary *)response
{
NSLog(@"GETSERVICETYPES%@",response);
serviceTypeDict = response[@"data"];
NSLog(@"SERVICETYPEDIC%@",serviceTypeDict);
serviceTypeArray = response[@"data"];
NSLog(@"SERVICETYPEARRAY%@",serviceTypeArray);
serviceTypeIDArray = [[serviceTypeArray valueForKey:@"sub_cat_id"]copy];
NSLog(@"SERVICETYPEIDARRAY%@",serviceTypeIDArray);
}
谢谢让它在操场上工作:
let booking: [String: Any] = [
"services": "5923f21c2279518a1661cb09,5923f22d2279513f1861cb09",
"status":2
]
let selectedServices: [[String: Any]] = [
[
"price_per_unit": 30,
"sub_cat_id": "5923f21c2279518a1661cb09",
"sub_cat_name": "SUV",
"unit": 1
],
[
"price_per_unit": 45,
"sub_cat_id": "5923f22d2279513f1861cb09",
"sub_cat_name": "Sedan",
"unit": 1
],
[
"price_per_unit": 65,
"sub_cat_id": "5923f23e2279518a1661cb09",
"sub_cat_name": "Bus",
"unit": 1
],
[
"price_per_unit": 75,
"sub_cat_id": "5923f24f2279513f1861cb09",
"sub_cat_name": "Lorry",
"unit": 1
]
]
if let bookingServices = booking["services"] as? String {
let services: [String] = bookingServices.components(separatedBy: ",")
let commonServices = selectedServices.filter({ services.contains( $0["sub_cat_id"] as? String ?? "" ) })
print(commonServices)
}
目标C等效物:
NSDictionary *booking = @{
@"services": @"5923f21c2279518a1661cb09,5923f22d2279513f1861cb09",
@"status": @2
};
NSArray *selectedServices = @[
@{
@"price_per_unit": @30,
@"sub_cat_id": @"5923f21c2279518a1661cb09",
@"sub_cat_name": @"SUV",
@"unit": @1
},
@{
@"price_per_unit": @45,
@"sub_cat_id": @"5923f22d2279513f1861cb09",
@"sub_cat_name": @"Sedan",
@"unit": @1
},
@{
@"price_per_unit": @65,
@"sub_cat_id": @"5923f23e2279518a1661cb09",
@"sub_cat_name": @"Bus",
@"unit": @1
},
@{
@"price_per_unit": @75,
@"sub_cat_id": @"5923f24f2279513f1861cb09",
@"sub_cat_name": @"Lorry",
@"unit": @1
}
];
NSString *servicesString = [booking valueForKey: @"services"];
NSArray *bookingServices = [servicesString componentsSeparatedByString:@","];
NSMutableArray *commonServices = [[NSMutableArray alloc] init];
for (NSDictionary *selectedService in selectedServices) {
NSString *sub_cat_id = selectedService[@"sub_cat_id"];
if([bookingServices containsObject: sub_cat_id]) {
[commonServices addObject: selectedService];
}
}
NSLog(@"%@", commonServices);
让它在操场上工作:
let booking: [String: Any] = [
"services": "5923f21c2279518a1661cb09,5923f22d2279513f1861cb09",
"status":2
]
let selectedServices: [[String: Any]] = [
[
"price_per_unit": 30,
"sub_cat_id": "5923f21c2279518a1661cb09",
"sub_cat_name": "SUV",
"unit": 1
],
[
"price_per_unit": 45,
"sub_cat_id": "5923f22d2279513f1861cb09",
"sub_cat_name": "Sedan",
"unit": 1
],
[
"price_per_unit": 65,
"sub_cat_id": "5923f23e2279518a1661cb09",
"sub_cat_name": "Bus",
"unit": 1
],
[
"price_per_unit": 75,
"sub_cat_id": "5923f24f2279513f1861cb09",
"sub_cat_name": "Lorry",
"unit": 1
]
]
if let bookingServices = booking["services"] as? String {
let services: [String] = bookingServices.components(separatedBy: ",")
let commonServices = selectedServices.filter({ services.contains( $0["sub_cat_id"] as? String ?? "" ) })
print(commonServices)
}
目标C等效物:
NSDictionary *booking = @{
@"services": @"5923f21c2279518a1661cb09,5923f22d2279513f1861cb09",
@"status": @2
};
NSArray *selectedServices = @[
@{
@"price_per_unit": @30,
@"sub_cat_id": @"5923f21c2279518a1661cb09",
@"sub_cat_name": @"SUV",
@"unit": @1
},
@{
@"price_per_unit": @45,
@"sub_cat_id": @"5923f22d2279513f1861cb09",
@"sub_cat_name": @"Sedan",
@"unit": @1
},
@{
@"price_per_unit": @65,
@"sub_cat_id": @"5923f23e2279518a1661cb09",
@"sub_cat_name": @"Bus",
@"unit": @1
},
@{
@"price_per_unit": @75,
@"sub_cat_id": @"5923f24f2279513f1861cb09",
@"sub_cat_name": @"Lorry",
@"unit": @1
}
];
NSString *servicesString = [booking valueForKey: @"services"];
NSArray *bookingServices = [servicesString componentsSeparatedByString:@","];
NSMutableArray *commonServices = [[NSMutableArray alloc] init];
for (NSDictionary *selectedService in selectedServices) {
NSString *sub_cat_id = selectedService[@"sub_cat_id"];
if([bookingServices containsObject: sub_cat_id]) {
[commonServices addObject: selectedService];
}
}
NSLog(@"%@", commonServices);
我认为你应该使用NSPredicate,因为这是一个快速枚举。只需两行代码 我在这里使用您的演示内容
NSDictionary *maindic = @{@"price_per_min" :@"10",
@"services":@"5923f21c2279518a1661cb09,5923f22d2279513f1861cb09",
};
NSDictionary *dic1 =@{@"price_per_unit" :@"30",
@"sub_cat_id":@"5923f21c2279518a1661cb09",
};
NSDictionary *dic2 =@{@"price_per_unit" :@"45",
@"sub_cat_id":@"5923f22d2279513f1861cb09",
};
NSDictionary *dic3 =@{@"price_per_unit" :@"65",
@"sub_cat_id":@"5923f23e2279518a1661cb09",
};
NSArray *mainArr= @[dic1,dic2,dic3];
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"sub_cat_id == '5923f21c2279518a1661cb09'"];
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"sub_cat_id == '5923f22d2279513f1861cb09'"];
NSPredicate *predicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[predicate1, predicate2]];
NSArray *resultArray = [mainArr filteredArrayUsingPredicate:predicate];
它将在resultArray中返回
{
"price_per_unit" = 30;
"sub_cat_id" = 5923f21c2279518a1661cb09;
},
{
"price_per_unit" = 45;
"sub_cat_id" = 5923f22d2279513f1861cb09;
}
我认为你应该使用NSPredicate,因为这是一个快速枚举。只需两行代码 我在这里使用您的演示内容
NSDictionary *maindic = @{@"price_per_min" :@"10",
@"services":@"5923f21c2279518a1661cb09,5923f22d2279513f1861cb09",
};
NSDictionary *dic1 =@{@"price_per_unit" :@"30",
@"sub_cat_id":@"5923f21c2279518a1661cb09",
};
NSDictionary *dic2 =@{@"price_per_unit" :@"45",
@"sub_cat_id":@"5923f22d2279513f1861cb09",
};
NSDictionary *dic3 =@{@"price_per_unit" :@"65",
@"sub_cat_id":@"5923f23e2279518a1661cb09",
};
NSArray *mainArr= @[dic1,dic2,dic3];
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"sub_cat_id == '5923f21c2279518a1661cb09'"];
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"sub_cat_id == '5923f22d2279513f1861cb09'"];
NSPredicate *predicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[predicate1, predicate2]];
NSArray *resultArray = [mainArr filteredArrayUsingPredicate:predicate];
它将在resultArray中返回
{
"price_per_unit" = 30;
"sub_cat_id" = 5923f21c2279518a1661cb09;
},
{
"price_per_unit" = 45;
"sub_cat_id" = 5923f22d2279513f1861cb09;
}
您是否为上述JSON数据创建了模型类?第一个是一个名为“services”的数组对象,对吗?@ibnetariq 1st array有一个名为“services”的对象,该对象有两个值,它们等于第二个数组的对象键“sub_cat_id”您需要将第一个数组的每个对象与第二个数组的每个对象进行检查?@ibnetariq我想用第一个数组的“服务”键和“子目录id”比较上述两个数组从第二个数组开始,最后在TableView的单元格标签中打印包含车辆的公共服务id的每单位价格。您是否为上述JSON数据创建了模型类?第一个是一个名为“服务”的数组对象,对吗?@ibnetariq 1st array的对象是“服务”哪两个值等于第二个数组的对象键“sub_cat_id”,您需要将第一个数组的每个对象与第二个数组的每个对象进行检查?@ibnetariq我想将上述两个数组与第一个数组的“services”键和“sub_cat_id”进行比较从第二个数组中,最后在TableView的单元格标签中打印包含车辆的公共服务id的每单位价格。抱歉,没有看到。请检查更新的答案。这很有效!谢谢:)使用谓词方法进行过滤速度很快,如另一个答案中所述。也尝试使用谓词。很抱歉没有看到。请检查更新的答案。这很有效!,谢谢:)如另一个答案中所述,使用谓词方法进行过滤速度很快。尝试使用谓词。这是更好更快的解决方案这是更好更快的解决方案