Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用NSPredicate用另一个NSArray筛选一个NSArray_Ios_Objective C_Nsarray_Nspredicate - Fatal编程技术网

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
来实现您编写的内容。