gpt4 book ai didi

objective-c - 如何使用 NSPredicates 数组过滤 NSArray?

转载 作者:行者123 更新时间:2023-12-03 16:26:48 26 4
gpt4 key购买 nike

我知道你可以做类似 [..."SELF.some_id == [c] %d AND SELF.some_id == [c] %d", id1, id2] 的事情,但我需要的不仅仅是这个。有没有办法在不构建字符串的情况下做到这一点。

例如...

NSArray *arrayOfWantedWidgetIds = @[1,3,5,6,9,13,14,16];
NSMutableArray *allWidgets = [[WidgetManager sharedWidget] getAllWidgets];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.widget_id ==[c] %d", arrayOfWantedWidgetIds]; //obviously we can't do this, it won't accept an array of IDS for %d
[allWidgets filterArrayUsingPredicate:predicate];

我怎样才能实现这样的目标?另一种方式...如果我循环这个,并为 arrayOfWantedWidgetIds 中的每个值创建单独的谓词,然后将所有单独的谓词添加到一个数组中...这也没有帮助,因为 filterArrayUsingPredicate 只接受 NSPredicate。不是它们的数组。

最佳答案

您不能像这样将数组传递给谓词 API。但是,您可以传递 ID 数组,并使用 IN 运算符,这在您的特定情况下应该足够了:

NSArray *arrayOfWantedWidgetIds = @[@1, @3, @5, @6, @9, @13, @14, @16];
NSMutableArray *allWidgets = [[WidgetManager sharedWidget] getAllWidgets];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.widget_id IN %@", arrayOfWantedWidgetIds];
[allWidgets filterArrayUsingPredicate:predicate];

您还可以使用 NSCompoundPredicate 构造复合谓词,但在这种情况下这是不必要的。

关于objective-c - 如何使用 NSPredicates 数组过滤 NSArray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28485408/

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