如何使用 NSMutableArray/NSMutableDictionary 中的 NSPredicate 创建 NSMutableArray

How to create NSMutableArray using NSPredicate from the NSMutableArray/NSMutableDictionary

我有 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" 键是必需的。

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

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

我用下面的代码做了解决方案,它完美地工作了。

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 的帮助下使用和解决它。

无需使用NSPredicate

即可得到想要的输出结果数组

这是小代码片段

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"]}];
}];

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