我想使用NSArray
NSArray
与另一个NSPredicate
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];
但是,不幸的是,我没有让它发挥作用。
答案 0 :(得分:2)
使用这个简单的查询。要从数组key1
获取b
的值,您必须使用简单的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);
答案 1 :(得分:1)
您可以通过在NSSet
这是示例
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)}];
NSMutableSet *aIntersection = [NSMutableSet setWithArray:a];
[aIntersection intersectSet:[NSSet setWithArray:b]];
NSArray *expectedResult = [aIntersection allObjects];
答案 2 :(得分:0)
您可以通过 NSPredicate 类方法执行此操作 + predicateWithBlock:
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 *filteredArray = [a filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
return [b containsObject:evaluatedObject];
}]];