如何从两个不同的数组中找到共同的对象并打印另一个对象?
How to find the common object from two different arrays and print another object?
我有 2 个数组从 2 个不同的 API 接收
预订数组
{
addrLine1 = "Al Thanyah Fifth, Dubai, United Arab Emirates";
addrLine2 = " ";
apntDate = "14 Feb 2018";
apntDt = "2018-02-14 15:31:30";
apntTime = "03:31 pm";
apptLat = "25.071102142334";
apptLong = "55.142993927002";
"appt_duration" = "";
bid = 555;
bookType = 1;
cancelAmt = 30;
"cat_id" = 591da979227951a10f004ad7;
"cat_name" = "Car Wash";
cid = 21;
"coupon_discount" = 0;
"customer_notes" = "";
"distance_met" = 120;
email = "fawasfais@gmail.com";
expireTime = "";
fname = Fawas;
"job_imgs" = 0;
"job_start_time" = "1970-01-01 00:00:00";
"job_timer" = "";
pPic = "https://s3.amazonaws.com/iserve/ProfileImages/20170720110011AM.png";
"payment_type" = 1;
phone = 568573570;
"price_per_min" = 10;
"pro_notes" = "";
services = "5923f21c2279518a1661cb09,5923f22d2279513f1861cb09";
status = 2;
statusMsg = "Provider Accepted.";
timer = "";
"timer_status" = "";
"visit_amount" = 60;
}
选定的服务数组
{
"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;
}
我想将上述两个数组与第一个数组的 "services" 键和第二个数组的 "sub_cat_id" 进行比较,最后打印包含车辆的公共服务 ID 的 price_per_unit。
示例 - 在第一个数组中找到 5923f21c2279518a1661cb09,5923f22d2279513f1861cb09 id,因此打印第二个数组中两个 id 的 price_per_units - 30, 45
有什么建议吗? (如果任何代码片段需要回答评论中提到的这个问题,我将使用所需的代码编辑和更新问题。
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);
}
谢谢
在 playground 上成功了:
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( [=10=]["sub_cat_id"] as? String ?? "" ) })
print(commonServices)
}
Objective-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
中 return
{
"price_per_unit" = 30;
"sub_cat_id" = 5923f21c2279518a1661cb09;
},
{
"price_per_unit" = 45;
"sub_cat_id" = 5923f22d2279513f1861cb09;
}
我有 2 个数组从 2 个不同的 API 接收
预订数组
{
addrLine1 = "Al Thanyah Fifth, Dubai, United Arab Emirates";
addrLine2 = " ";
apntDate = "14 Feb 2018";
apntDt = "2018-02-14 15:31:30";
apntTime = "03:31 pm";
apptLat = "25.071102142334";
apptLong = "55.142993927002";
"appt_duration" = "";
bid = 555;
bookType = 1;
cancelAmt = 30;
"cat_id" = 591da979227951a10f004ad7;
"cat_name" = "Car Wash";
cid = 21;
"coupon_discount" = 0;
"customer_notes" = "";
"distance_met" = 120;
email = "fawasfais@gmail.com";
expireTime = "";
fname = Fawas;
"job_imgs" = 0;
"job_start_time" = "1970-01-01 00:00:00";
"job_timer" = "";
pPic = "https://s3.amazonaws.com/iserve/ProfileImages/20170720110011AM.png";
"payment_type" = 1;
phone = 568573570;
"price_per_min" = 10;
"pro_notes" = "";
services = "5923f21c2279518a1661cb09,5923f22d2279513f1861cb09";
status = 2;
statusMsg = "Provider Accepted.";
timer = "";
"timer_status" = "";
"visit_amount" = 60;
}
选定的服务数组
{
"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;
}
我想将上述两个数组与第一个数组的 "services" 键和第二个数组的 "sub_cat_id" 进行比较,最后打印包含车辆的公共服务 ID 的 price_per_unit。
示例 - 在第一个数组中找到 5923f21c2279518a1661cb09,5923f22d2279513f1861cb09 id,因此打印第二个数组中两个 id 的 price_per_units - 30, 45
有什么建议吗? (如果任何代码片段需要回答评论中提到的这个问题,我将使用所需的代码编辑和更新问题。
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);
}
谢谢
在 playground 上成功了:
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( [=10=]["sub_cat_id"] as? String ?? "" ) })
print(commonServices)
}
Objective-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
中 return{
"price_per_unit" = 30;
"sub_cat_id" = 5923f21c2279518a1661cb09;
},
{
"price_per_unit" = 45;
"sub_cat_id" = 5923f22d2279513f1861cb09;
}