gpt4 book ai didi

ios - 我可以将 NSPredicate 与 NSSet 一起使用吗

转载 作者:行者123 更新时间:2023-11-28 19:00:01 25 4
gpt4 key购买 nike

我想得到两个 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]);

我只想根据年龄获取过滤对象(相交)。简而言之,我可以指定 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];

如果你想修改setA本身,使用:

[setA filterUsingPredicate:predicate];

例子:

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);

输出:

{(
{
Name = abc;
age = 11;
},
{
Name = def;
age = 11;
},
{
Name = ghi;
age = 22;
},
{
Name = jkl;
age = 22;
}
)}

关于ios - 我可以将 NSPredicate 与 NSSet 一起使用吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26903759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com