【问题标题】:How to create NSMutableArray using NSPredicate from the NSMutableArray/NSMutableDictionary如何使用 NSMutableArray/NSMutableDictionary 中的 NSPredicate 创建 NSMutableArray
【发布时间】:2016-09-22 10:34:01
【问题描述】:

我有 NSMutable 数组,它在其索引中包含某些字段作为键和值对,像这样

Result =     (
            {
        FName = @"Achal";
        MName = @"Pradip";
        LName = @"Gandhi";
        AGE =  35;
    },
    {
        FName = @"Jenish";
        MName = @"Pavan";
        LName = @"Patel";
        AGE = 40;
    }
    {
        FName = @"Pritesh";
        MName = @"Amit";
        LName = @"Dave";
        AGE = 50;
    }
    {
        FName = @"Mehul";
        MName = @"Nikhil";
        LName = @"Shah";
        AGE = 40;
    }
);

我想从那个数组中过滤它,我需要像这样输出 Using NSPredicate

FilterArray = {
        FName = @"Achal";
        LName = @"Gandhi";
    },
    {
        FName = @"Jenish";
        LName = @"Patel";
    }
    {
        FName = @"Pritesh";
        LName = @"Dave";
    }
    {
        FName = @"Mehul";
        LName = @"Shah";
    }
);

原始数组中仅需要“FName”和“LName”键。

【问题讨论】:

  • 使用您的数组,就像字典数组一样,仅此而已,无论您在哪里需要使用该键

标签: ios objective-c iphone nsmutablearray nsarray


【解决方案1】:

NSPrecate 返回由一个或多个条件过滤的对象列表。 在您的情况下,您想获得一些数组但具有不同的对象。 您可以使用此代码:

NSMutableArray *FilterArray =[NSMutableArray new];
    for (NSDictionary *dic in Result){
        NSDictionary *newdic = [NSDictionary dictionaryWithObjectsAndKeys:[dic objectForKey:@"FName"],@"FName",[dic objectForKey:@"LName"],@"LName", nil];
        [FilterArray addObject:newdic];
    }

【讨论】:

    【解决方案2】:

    我用下面的代码解决了这个问题,它完美地工作。

    NSMutableArray *tempArray = [[NSMutableArray alloc]init];
    
    
    for(int i=0;i < self.Result.count;i++){
        NSMutableDictionary *cartData = [[NSMutableDictionary alloc]init];
    
        [cartData setObject:[[Result objectAtIndex:i] valueForKey:@"Fname"] forKey:@"FName"];
    
    
        [cartData setObject:[[Result objectAtIndex:i] valueForKey:@"LName"] forKey:@"LName"];
    
        [tempArray addObject:cartData];
    }
    

    但这是通过循环完成的,但我想在 NSPredicate 的帮助下使用和解决它。

    【讨论】:

      【解决方案3】:

      不使用NSPredicate也可以得到期望的输出结果数组

      这里是小代码sn-p

      NSArray *arrObjects = [responseObject valueForKey:@"Result"];
      
      [arrObjects enumerateObjectsUsingBlock:^(NSDictionary *_Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
          [arrFilterResult addObject:@{@"FName":[obj valueForKey:@"FName"],@"LName":[obj valueForKey:@"LName"]}];
      }];
      

      如果您有任何问题,请告诉我。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-13
        • 1970-01-01
        相关资源
        最近更新 更多