фильтровать NSDictionary из массива словаря для заданной пары ключ-значение - PullRequest
0 голосов
/ 10 мая 2018
dataProvider_array = @[
                  @{
                      @"shop_id": @"4",
                      @"shop_name": @"Test shop 1”,
                      @"orders": @[
                                 @{
                                     @"order_id": @"288",
                                     @"user_name": @"User 1",
                                     @"order_type": @“special”,
                                 },
                                 @{
                                     @"order_id": @"289",
                                     @"user_name": @"User 1",
                                     @"order_type": @"special",
                                 },
                                 @{
                                     @"order_id": @"285",
                                     @"user_name": @"User 1”,
                                     @"order_type": @"normal",
                                 },
                                 @{
                                     @"order_id": @"286”,
                                     @"user_name": @"User 1”,
                                     @"order_type": @"normal",
                                 },
                                 @{
                                     @"order_id": @"287”,
                                     @"user_name": @"User 1”,
                                     @"order_type": @"normal",
                                 },
                                 @{
                                    @"order_id": @"284”,
                                     @"user_name": @"User 1”,
                                     @"order_type": @"normal",
                                 }
                                 ]
                  },
                  @{
                      @"shop_id": @"1",
                      @"shop_name": @"Test Shop 2”,
                      @"orders": @[
                                @{
                                    @"order_id": @"288",
                                   @"user_name": @"User 1",
                                 @"order_type": @"special",
                             },
                                 @{
                                     @"order_id": @"289",
                                     @"user_name": @"User 1",
                                     @"order_type": @"special",
                                 },
                                 @{
                                     @"order_id": @"290”,
                                     @"user_name": @"User 1”,
                                     @"order_type": @"normal",
                                 }
                                 ]
                  }
                  ];

Эти данные представлены в виде сгруппированных таблиц с возможностью выбора заказов. У нас есть 2 типа магазинов: обычный и специальный. Поэтому, когда пользователь выбирает любой заказ специального типа, тогда все заказы с одинаковым идентификатором заказа должны выбираться пользователем.

Например, предположим, что пользователь выбрал order_id 289 для второго магазина (id = 1), тогда пользователь должен выбрать тот же идентификатор заказа 289 для другого магазина. Как я могу поддерживать эту вещь?

1 Ответ

0 голосов
/ 10 мая 2018

Если вы хотите отфильтровать, вы можете использовать это решение, но я не уверен, что это лучшее из возможных решений: -

NSString *orderID=@"289";//Replace this with your order id
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
NSArray *categories = [evaluatedObject objectForKey:@"order"];
NSPredicate *subPredicate=[NSPredicate predicateWithFormat:@"(order_id == %@)",orderID];
   return [categories filteredArrayUsingPredicate:subPredicate].count;
}];
NSArray *filteredArray=[dataProvider_array filteredArrayUsingPredicate:predicate];

Чтобы проверить это, я создал свои собственные данные, такие как: -

    NSArray *arr=@[@{@"order":@[@{@"order_id":@"1",
                                  @"order_name":@"a"
                                  },
                                @{@"order_id":@"2",
                                  @"order_name":@"b"
                                  }]},
                   @{@"order":@[@{@"order_id":@"3",
                                  @"order_name":@"a"
                                  },
                                @{@"order_id":@"4",
                                  @"order_name":@"b"
                                  }]},
                   @{@"order":@[@{@"order_id":@"5",
                                  @"order_name":@"a"
                                  },
                                @{@"order_id":@"6",
                                  @"order_name":@"b"
                                  }]}
                   ];
    NSString *orderID=@"1";
    NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
        NSArray *categories = [evaluatedObject objectForKey:@"order"];
        NSPredicate *subPredicate=[NSPredicate predicateWithFormat:@"(order_id == %@)",orderID];
        return [categories filteredArrayUsingPredicate:subPredicate].count;
    }];
    NSArray *filteredArray=[arr filteredArrayUsingPredicate:predicate];

Или, как предложил @Willeke

filteredArray = [arr filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"ANY order.order_id == %@",orderID]] 
...