从给定键值对的字典数组中过滤 NSDictionary

Posted

技术标签:

【中文标题】从给定键值对的字典数组中过滤 NSDictionary【英文标题】:filter NSDictionary from array of dictionary for a given key value pair 【发布时间】:2018-05-10 07:33:56 【问题描述】:
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",
                                 
                                 ]
                  
                  ];

此数据显示在分组表视图中,并带有选择订单的选项。 我们有两种类型的商店普通和特殊。因此,当用户选择任何特殊类型的订单时,必须由用户选择所有具有相同订单 ID 的订单。

例如,假设用户为第二家商店 (id = 1) 选择了 order_id 289,那么用户也必须为其他商店选择相同的订单 id 289。我该如何维护这个东西?

【问题讨论】:

你说的“我该如何维护这个东西”是什么意思?不清楚你想在这里做什么,你应该给我们当用户选择order_id = 289时你正在寻找的数据结构的例子,这样我们就可以帮助你得到想要的结果 当用户为 shop_id = 1 选择 order_id = 289 时,我想强制用户为其他商店(其中 shop_id = 4)选择具有相同订单 ID(即 289)的订单。 获取其他店铺的订单,过滤order_id = 289。 【参考方案1】:

如果你想过滤,那么你可以使用这个解决方案,但我不确定这是最好的解决方案:-

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]] 

【讨论】:

在第三行中您使用哪个键来创建类别数组? 你试过了吗? 结果如何? 我添加了一个示例好友,请查看@Willeke 你测试了吗? @Willeke

以上是关于从给定键值对的字典数组中过滤 NSDictionary的主要内容,如果未能解决你的问题,请参考以下文章

从包含键值对的字符串中获取python字典

Python字典键值对的添加和遍历

反转字典中键值对的顺序(Python)[重复]

python字典中键值对的值为中文,打印成转义字符,怎么解决

调试 C# 时为啥不能更改字典键值对的计数?

Python中删除字典中键值对的方法