she*_*ath 1 xcode objective-c nsset ios
我想得到两个 NSSet 的交集,默认情况下 NSSset 比较对象的每个成员,以得出 SetA 和 SetB 中的交集对象。
这是我的代码。
NSMutableDictionary *dic = [[NSMutableDictionary alloc]init];
[dic setObject:@"25" forKey:@"age"];
[dic setObject:@"abc" forKey:@"Name"];
NSMutableDictionary *dic1 = [[NSMutableDictionary alloc]init];
[dic1 setObject:@"21" forKey:@"age"];
[dic1 setObject:@"xyz" forKey:@"Name"];
NSMutableDictionary *dic2 = [[NSMutableDictionary alloc]init];
[dic2 setObject:@"20" forKey:@"age"];
[dic2 setObject:@"abc" forKey:@"Name"];
NSMutableDictionary *dic3 = [[NSMutableDictionary alloc]init];
[dic3 setObject:@"25" forKey:@"age"];
[dic3 setObject:@"abcNameNotMatch" forKey:@"Name"];
NSMutableDictionary *dic4 = [[NSMutableDictionary alloc]init];
[dic3 setObject:@"20" forKey:@"age"];
[dic3 setObject:@"abcNameNotMatch" forKey:@"Name"];
NSArray *a = [NSArray arrayWithObjects:dic,dic1,dic2, nil];
NSArray *b = [NSArray arrayWithObjects:dic3,dic4, nil];
NSMutableSet *setA = [NSMutableSet setWithArray:a];
NSSet *setB = [NSSet setWithArray:b];
//[setA intersectSet:setB];
//NSLog(@"c: %@", [setA allObjects]);
[setA intersectSet:setB];
NSLog(@"d: %@", [setA allObjects]);
Run Code Online (Sandbox Code Playgroud)
我只想根据年龄获取过滤器对象(相交)。简而言之,我可以指定 intersectSet 函数应该只比较 SetA 和 SetB.MeanWhile 的年龄,忽略名称的值。2 对象应该使用我的代码返回 dic 和 dic2 。setA 和 setB 中的相交对象是。求助。
集合A
1)dic 年龄是 25
2)dic2 年龄是 20
集合B
1)dic3 年龄是 25
2)dic4 年龄是 20
尝试:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age in %@.age", setB];
NSSet *result = [setA filteredSetUsingPredicate:predicate];
Run Code Online (Sandbox Code Playgroud)
如果要修改setA自身,请使用:
[setA filterUsingPredicate:predicate];
Run Code Online (Sandbox Code Playgroud)
例子:
NSMutableSet *setA = [NSMutableSet setWithArray:
@[
@{@"age":@(11), @"Name":@"abc"},
@{@"age":@(11), @"Name":@"def"},
@{@"age":@(22), @"Name":@"ghi"},
@{@"age":@(22), @"Name":@"jkl"},
@{@"age":@(33), @"Name":@"lmn"},
@{@"age":@(33), @"Name":@"opq"},
]];
NSSet *setB = [NSSet setWithArray:
@[
@{@"age":@(11), @"Name":@"rst"},
@{@"age":@(22), @"Name":@"uvw"},
@{@"age":@(22), @"Name":@"xyz"},
]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age in %@.age", setB];
[setA filterUsingPredicate:predicate];
NSLog(@"%@", setA);
Run Code Online (Sandbox Code Playgroud)
输出:
{(
{
Name = abc;
age = 11;
},
{
Name = def;
age = 11;
},
{
Name = ghi;
age = 22;
},
{
Name = jkl;
age = 22;
}
)}
Run Code Online (Sandbox Code Playgroud)