在包含带有自定义对象的 NSArray 的 NSArray 中进行 NSPredicate 搜索

问题描述 投票:0回答:2

我有一个名为

NSArray
groups
,其中包含
NSArray
对象,每个对象又包含
QuestionSub
对象,而这些对象又继承自
Question
类。

Question 类包含一个名为

NSString
Id
值。这是我想要搜索的字符串。 问题是
QuestionSub
包含一个名为
NSString
parent
,它是对父问题的引用;因此我不能使用
NSPredicate
来查询
ANY
语句,因为它会匹配任何相等的字符串。

我的问题是我的搜索没有返回结果。但是,我似乎无法找到正确的查询来让我的

NSPredicate
获得正确的结果。

这是我的代码:

/**
 *  Get the (QuestionSub)[QuestionSub] for a questuon GUID
 *
 *  @param guid NSString The GUID of the question
 *
 *  @return QuestionSub The QuestionSub
 */
- (QuestionSub *)getQuestionForGuid:(NSString *)guid
{
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Id == %@", guid];
    NSArray *filtered = [self.groups filteredArrayUsingPredicate:predicate];

    if (filtered.count > 0)
    {
        return [filtered objectAtIndex:0];
    }
    else {
        return nil;
    }
}

这是我的

NSArray
的代表: The representation

ios objective-c nsstring nsarray nspredicate
2个回答
1
投票

问题在于 filteredArrayUsingPredicate: 过滤了整个组数组。因此,ANY 运算符表示要过滤掉包含具有所需 Id 属性的 Question 对象的所有子数组。

在您的示例中,您在同一子数组中有具有相同 Idparent 的问题,因此 ANY 在这里可以正常工作,并且 == 和 CONTAINS 之间对于我们的目标没有区别。

要获得所需的结果,您首先需要将组展平为一维问题数组,然后应用谓词。

不幸的是 NSArray 类没有提供任何方法来展平多维数组(:


1
投票

看起来你可以使用字符串比较谓词,你可以试试这个:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Id CONTAINS[c] %@", guid];
© www.soinside.com 2019 - 2024. All rights reserved.