Ios 如何从两个不同的数组中找到公共对象并打印另一个对象?

Ios 如何从两个不同的数组中找到公共对象并打印另一个对象?,ios,objective-c,nsarray,Ios,Objective C,Nsarray,我有2个阵列从2个不同的API接收数据 预订阵列 选定服务阵列 我想将上述两个数组与第一个数组中的“服务”键和第二个数组中的“sub_cat_id”进行比较,最后打印包含车辆的公共服务id的每单位价格 示例-5923F21C2279518A1661CB095923F22D2279513F1861CB09在第一个数组中找到的ID,因此从第二个数组-30,45打印两个ID的每单位价格 有什么建议吗?(如果任何代码片段需要回答此问题,请在评论中提及,我将用所需代码编辑并更新此问题 This is ho

我有2个阵列从2个不同的API接收数据

预订阵列 选定服务阵列 我想将上述两个数组与第一个数组中的“服务”键和第二个数组中的“sub_cat_id”进行比较,最后打印包含车辆的公共服务id的每单位价格

示例-5923F21C2279518A1661CB095923F22D2279513F1861CB09在第一个数组中找到的ID,因此从第二个数组-30,45打印两个ID的每单位价格

有什么建议吗?(如果任何代码片段需要回答此问题,请在评论中提及,我将用所需代码编辑并更新此问题

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的每单位价格。抱歉,没有看到。请检查更新的答案。这很有效!谢谢:)使用谓词方法进行过滤速度很快,如另一个答案中所述。也尝试使用谓词。很抱歉没有看到。请检查更新的答案。这很有效!,谢谢:)如另一个答案中所述,使用谓词方法进行过滤速度很快。尝试使用谓词。这是更好更快的解决方案这是更好更快的解决方案