2 NSArrays,根据属性值查找交集?

NSF*_*NSF 4 objective-c nsarray nsset nspredicate ios

我有两个不同类型的自定义对象的2个NSArrays.

对象A属性:ID:名称:作者:

对象B属性:bookID:value:终止符:

我需要过滤一个类型为"A"的对象数组,其ID值等于包含"B"类型对象的第二个数组的任何对象的bookID值.

我试图通过将数组转换为集合来使用intersectSet:方法,但由于这两个对象的类型不同,所以没有任何反应.

什么是最有效的过滤方式?我可以指定在进行交叉时要查看的属性吗?

Lar*_*rme 12

这是一个示例代码示例:

NSDictionary *dictionaryA1 = @{@"ID":@"1", @"Name":@"NameA1", @"Author":@"AuthorA1"};
NSDictionary *dictionaryA2 = @{@"ID":@"2", @"Name":@"NameA2", @"Author":@"AuthorA2"};
NSDictionary *dictionaryA3 = @{@"ID":@"3", @"Name":@"NameA3", @"Author":@"AuthorA3"};

NSDictionary *dictionaryB0 = @{@"bookID":@"0", @"Name":@"NameB0", @"Author":@"AuthorB0"};
NSDictionary *dictionaryB1 = @{@"bookID":@"1", @"Name":@"NameB1", @"Author":@"AuthorB1"};
NSDictionary *dictionaryB3 = @{@"bookID":@"3", @"Name":@"NameB3", @"Author":@"AuthorB3"};

NSArray *arrayA = @[dictionaryA1, dictionaryA2, dictionaryA3];
NSArray *arrayB = @[dictionaryB0, dictionaryB1, dictionaryB3];

NSArray *intersectionWithBookID = [arrayA filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"ID IN %@", [arrayB valueForKey:@"bookID"]]];

NSLog(@"intersectionWithBookID: %@", intersectionWithBookID);
Run Code Online (Sandbox Code Playgroud)

输出:

intersectionWithBookID: (
        {
        Author = AuthorA1;
        ID = 1;
        Name = NameA1;
    },
        {
        Author = AuthorA3;
        ID = 3;
        Name = NameA3;
    }
Run Code Online (Sandbox Code Playgroud)