ios - 使用 NSPredicate 用另一个 NSArray 过滤一个 NSArray

标签 ios objective-c nsarray nspredicate

我想使用 NSPredicate 用另一个 NSArray 过滤一个 NSArray

NSArray *a = @[@{@"key1": @"foo", @"key2": @(53), @"key3": @(YES)},
               @{@"key1": @"bar", @"key2": @(12), @"key3": @(YES)},
               @{@"key1": @"foobar", @"key2": @(42), @"key3": @(NO)}];

NSArray *b = @[@{@"key1": @"foobar", @"key2": @(42), @"key3": @(NO)}];

NSArray *expectedResult = @[@{@"key1": @"foobar", @"key2": @(42), @"key3": @(NO)}];

我试过类似的东西:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"key1 like (key1 IN %@)", b];
NSArray *result = [a filteredArrayUsingPredicate:predicate];

但是,不幸的是,我没有让它发挥作用。

最佳答案

使用这个简单的查询。要从数组 b 中获取 key1 的值,您必须使用简单的 KVC valueForKey: 方法。

NSArray *a = @[@{@"key1": @"foo", @"key2": @(53), @"key3": @(YES)},
               @{@"key1": @"bar", @"key2": @(12), @"key3": @(YES)},
               @{@"key1": @"foobar", @"key2": @(42), @"key3": @(NO)}];

NSArray *b = @[@{@"key1": @"foobar", @"key2": @(42), @"key3": @(NO)}];

NSArray *expectedResult = @[@{@"key1": @"foobar", @"key2": @(42), @"key3": @(NO)}];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"key1 IN %@",[b valueForKey:@"key1"]];
NSArray *result = [a filteredArrayUsingPredicate:predicate];
NSLog(@"%@",result);

关于ios - 使用 NSPredicate 用另一个 NSArray 过滤一个 NSArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24507636/

相关文章:

android - 如何为 ZipCode 和 Samsung Galaxy 强制使用数字键盘?

ios - 为什么我的字符串在写入 PDF 时会被截断

ios - 为什么不设置此 UISlider 的值属性更新其位置?

ios - 以圆周运动绕一点移动物体

ios - 基于单个对象键对 NSDictionary 进行排序

ios - 我在哪里可以一个一个地购买 iOS 标签栏图标?

objective-c - 废弃内存和内存泄漏有什么区别?

ios - 当用户在字段中键入至少一个字符时,uitextfield rightView 可见

ios - 从返回 NSArray 的 Swift 覆盖 Obj-C 类方法

ios - UIView 将如何获得释放?解释