ios - 如何使用 NSPredicate CONTAINS IN 数组获取所有项目

标签 ios arrays nspredicate

我有一个对象数组,每个对象都有一个 id,我想获取 item.objectID 包含在一个 id 数组中的所有项目,我怎样才能得到那个结果?

我尝试做什么,但在创建 predicateWithFormat 时出错:无法解析格式字符串:

NSString *predicateFormat = [NSString stringWithFormat:@"SELF.itemID CONTAIN IN (1,2,3,4,5,6,7,8)"];
NSPredicate *predicate = [NSPredicate predicateWithFormat: predicateFormat];
filteredData = [localData filteredArrayUsingPredicate:predicate];

我只是想避免这种情况:

NSString *predicateFormat = [NSString stringWithFormat:@"SELF.itemID = 1 OR SELF.itemID = 2 OR SELF.itemID = 3"];
NSPredicate *predicate = [NSPredicate predicateWithFormat: predicateFormat];
filteredData = [localData filteredArrayUsingPredicate:predicate];

因为还有其他的条件要添加给filter。

最佳答案

你几乎成功了:)

    NSArray *objects = @[
        @{
            @"itemID" : @1
        },
        @{
            @"itemID" : @2
        },
        @{
            @"itemID" : @3
        },
        @{
            @"itemID" : @4
        },
        @{
            @"itemID" : @5
        }
    ];

    NSArray *idsToLookFor = @[@3, @4];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"itemID IN %@", idsToLookFor];
    NSArray *result = [objects filteredArrayUsingPredicate:predicate];

    NSLog(@"result: %@", result);

如果您不想传入任何数组,而是将谓词写成“in hand”,则语法为:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"itemID IN { 3, 4 }"];

结果将是:

result: (
        {
        itemID = 3;
    },
        {
        itemID = 4;
    }
)

关于ios - 如何使用 NSPredicate CONTAINS IN 数组获取所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30237717/

相关文章:

ios - iPad 语音识别 - 开发人员访问?

jquery - 我该如何做到这一点,当人们将我的移动网站保存到他们的主屏幕时,它会像 Kahoot.it 一样删除 Safari?

ios - 有没有办法强制异步 NSURLConnection 在后台调用 connectionDidFinishLoading?

java - 如何显示用户输入数组中的最大和最小数字?

ios - NSPredicate 使用实体的关系获取其他实体

android - React Native 填充图标的透明部分

javascript - 将项目添加到数组 React 时删除占位符

java - 二维的 toCharArray()

ios - 核心数据 - "days"和 "tasks"(对多关系) - 如何获取一天的所有任务?

ios - swift 3 : Use NSPredicate(format:) to filter objects by type/class