Ios 使用NSPredicate用另一个NSArray筛选一个NSArray
我想用另一个Ios 使用NSPredicate用另一个NSArray筛选一个NSArray,ios,objective-c,nsarray,nspredicate,Ios,Objective C,Nsarray,Nspredicate,我想用另一个NSArray使用NSPredicate过滤一个NSArray NSArray *a = @[@{@"key1": @"foo", @"key2": @(53), @"key3": @(YES)}, @{@"key1": @"bar", @"key2": @(12), @"key3": @(YES)}, @{@"key1": @"foobar", @"key2": @(42), @"key3": @(NO)}]; NSAr
NSArray
使用NSPredicate
过滤一个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];
但不幸的是,我没有成功 您可以通过在
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];
您可以通过在
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];
您可以通过在
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];
您可以通过在
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];
您可以通过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];
}]];
您可以通过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];
}]];
您可以通过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];
}]];
您可以通过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];
}]];
使用这个简单的查询。要从数组
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);
使用这个简单的查询。要从数组
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);
使用这个简单的查询。要从数组
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);
使用这个简单的查询。要从数组
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);
这个答案并不令人满意,因为这种过滤器无法通过唯一密钥测试工作。例如,如果
key2
等于@(94)
而不是@(42)
,它将不起作用。。。您可以使用方法-[NSMutableArray removeObjectsInArray:
而不是使用NSSet
来实现您编写的内容。这个答案并不令人满意,因为这种过滤器无法通过唯一键测试工作。例如,如果key2
等于@(94)
而不是@(42)
,它将不起作用。。。您可以使用方法-[NSMutableArray removeObjectsInArray:
而不是使用NSSet
来实现您编写的内容。这个答案并不令人满意,因为这种过滤器无法通过唯一键测试工作。例如,如果key2
等于@(94)
而不是@(42)
,它将不起作用。。。您可以使用方法-[NSMutableArray removeObjectsInArray:
而不是使用NSSet
来实现您编写的内容。这个答案并不令人满意,因为这种过滤器无法通过唯一键测试工作。例如,如果key2
等于@(94)
而不是@(42)
,它将不起作用。。。您可以使用方法-[NSMutableArray removeObjectsInArray:
而不是使用NSSet
来实现您编写的内容。