gpt4 book ai didi

objective-c - 一个可以递归遍历对象图的 NSPredicate?

转载 作者:搜寻专家 更新时间:2023-10-30 20:27:35 32 4
gpt4 key购买 nike

我正在尝试过滤基本上形成树型图的对象数组。我想要做的是从这个数组中过滤掉可见属性为 NO 的所有对象,或者如果它的父/祖 parent /等可见属性为真(子对象可以有可见属性为 YES,而其父对象可以为 NO)。

我不清楚我将如何使用 NSPredicate 语法继续搜索父节点,直到没有父节点或找到可见属性。有什么办法可以解决这个问题吗?

最佳答案

自从我问这个问题以来已经有一段时间了,我想我正在做的事情朝另一个方向发展,但我现在意识到有一些可能性可以解决我当时想要的问题:

  • 让可见属性方法以递归方式运行,而不是让格式谓词这样做。这可以像这样完成:
- (BOOL) isVisible {
return visible && [parent isVisible];
}

//...
id filtered = [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"visible == YES"]];
  • 使用 block 谓词而不是格式谓词来进行递归遍历:
[array filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {

id obj = evaluatedObject;
while (obj) {
if (![obj isVisible]) return NO;
obj = [obj parent];
}
return YES;
}]];

或两者的结合(我认为这将是最健壮和可读性最强的)。

关于objective-c - 一个可以递归遍历对象图的 NSPredicate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2285467/

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