Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSPredicate在包含具有自定义对象的NSArray的NSArray中搜索_Objective C_Nsstring_Nsarray_Iteration_Nspredicate - Fatal编程技术网

Objective c NSPredicate在包含具有自定义对象的NSArray的NSArray中搜索

Objective c NSPredicate在包含具有自定义对象的NSArray的NSArray中搜索,objective-c,nsstring,nsarray,iteration,nspredicate,Objective C,Nsstring,Nsarray,Iteration,Nspredicate,我有一个名为groups的NSArray对象,其中包含NSArray对象,每个对象都包含QuestionSub对象,而这些对象又继承自Question类 问题类包括一个名为Id的NSString值。这是我要搜索的字符串。 问题是QuestionSub包含一个名为parent的NSString,它是对父问题的引用;因此,我不能将NSPredicate与ANY语句一起使用,因为它将匹配任何相等的字符串 我的问题是我的搜索没有返回结果。但是,我似乎无法为我的NSPredicate找到正确的查询以获得正

我有一个名为
groups
NSArray
对象,其中包含
NSArray
对象,每个对象都包含
QuestionSub
对象,而这些对象又继承自
Question

问题类包括一个名为
Id
NSString
值。这是我要搜索的字符串。 问题是
QuestionSub
包含一个名为
parent
NSString
,它是对父问题的引用;因此,我不能将
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
的表示:

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

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Id CONTAINS[c] %@", guid];
问题在于filteredArrayUsingPredicate:过滤整个组数组。所以,任何操作符都说要过滤掉所有包含具有所需Id属性的问题对象的子数组

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

为了得到所需的结果,您首先需要将您的组扁平化为一维问题数组,然后应用谓词


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

做的事情与
any
相同,不尊重
Id
,因此它在
\u父级
\u Id
上都匹配,这意味着
过滤了
(谓词结果)有多个结果/行。请参见上面添加的图像,其中有示例数据。数组的内容是从JSON自动填充的,因此我没有一个示例,不幸的是……除了上面的内容之外。同样,没有这样的代码。数组的内容是从JSON结构自动填充的。当然,您可以用关于它缺乏足够的信息来诊断问题,但这是不真实的。有足够的信息,这是一个有充分证明的问题。此外,到目前为止,有两个答案可以表明这一点。我认为我们不应该把这变成一个长时间的讨论,我只是认为它对于一些样本数据是有用的。一个具有我用一些字典和相关的键组成数组。你可以用子查询做很多事情,但是如果没有任何样本数据,就很难处理-除非你想让回答者也为你构建测试数据集。顺便说一句,你读过了吗?我要的是一个可编译的示例,这样我们都知道我们要完成什么。好的,我明白了d、 鉴于上图所示为阵列,实际问题的示例代码已包含在内,问题并不特定于我的
NSArray
,并且存在解释;我觉得我已经完成了这些目标。是的,我已经阅读了MCVE(和其他规则)而且,关于上面的图像,它符合可验证类别。但是,我非常感谢您的关注以及您为提高SO的帖子质量所做的努力。谢谢。我很担心。我现在通过
for
循环解决了这个问题,该循环在
组中的每个子
NSArray
上应用
NSPredicate
数组。这样做有点冒险,但考虑到数组包含的组数不会超过前5-10组,我愿意冒险。谢谢。