使用 NSPredicate 搜索 NSArray

Posted

技术标签:

【中文标题】使用 NSPredicate 搜索 NSArray【英文标题】:Search NSArray using NSPredicate 【发布时间】:2013-10-16 20:53:37 【问题描述】:

如果我问愚蠢的问题,我是 NSPredicate 的新手,很抱歉。我有两个 NSArray(keyArray 和 valueArray)。我必须使用 keyArray 在 valueArray 中找到匹配项。下面的代码工作正常,但我必须一一搜索。使用不同键数组搜索数组的任何方式。

        NSPredicate *userPredicate = [NSPredicate predicateWithFormat:@"companyId = %@", [[[self selectedCompanies] objectAtIndex:0] companiesIdentifier]];
    NSLog(@"Users: %@", [[[self userData] users] filteredArrayUsingPredicate:userPredicate]);

    NSPredicate *userPredicate1 = [NSPredicate predicateWithFormat:@"companyId = %@", [[[self selectedCompanies] objectAtIndex:1] companiesIdentifier]];
    NSLog(@"Users: %@", [[[self userData] users] filteredArrayUsingPredicate:userPredicate1]);

【问题讨论】:

【参考方案1】:

你可以这样做:

NSPredicate *userPredicate1 = [NSPredicate predicateWithFormat:@"companyId IN %@", [[self selectedCompanies] valueForKey:@"companiesIdentifier"];
NSLog(@"Users: %@", [[[self userData] users] filteredArrayUsingPredicate:userPredicate1]);

这里发生的情况是,我们获取所有选定公司的companiesIdentifier,并根据这些标识符匹配用户。

valueForKey: 在数组对象上返回一个数组,其中包含数组中每个对象所需键的值。 IN 是在集合(数组、集合等)中搜索的谓词运算符。

【讨论】:

以上是关于使用 NSPredicate 搜索 NSArray的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSPredicate 搜索 NSDictionaries 的 NSArray 时没有结果

如何使用 NSPredicate 加快数组搜索速度?

NSArray 上的 NSPredicate 用于搜索任何对象

NSPredicate 和 NSArray

NSDictionary VS NSArray+NSPredicate:哪个更快/推荐

带有 NSNumber 的 NSArray 的 NSPredicate(核心数据)