Ios 使用NSPredicate筛选包含字典的数组数组

Ios 使用NSPredicate筛选包含字典的数组数组,ios,objective-c,nsarray,nsdictionary,nspredicate,Ios,Objective C,Nsarray,Nsdictionary,Nspredicate,我有一个名为charactersAndDescriptions的数组,其中包含几个数组,每个数组中都有一个包含两个键/值的NSDictionary。看起来是这样的: NSPredicate *predicate = [NSPredicate predicateWithFormat:@"desc contains[c] %@", searchText]; NSMutableArray *finalColletion = [NSMutableArray array]; for (NSArray *t

我有一个名为charactersAndDescriptions的数组,其中包含几个数组,每个数组中都有一个包含两个键/值的NSDictionary。看起来是这样的:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"desc contains[c] %@", searchText];
NSMutableArray *finalColletion = [NSMutableArray array];
for (NSArray *temp in self.charactersAndDescriptions) {
    NSArray *result =[temp filteredArrayUsingPredicate:predicate];
    if([result count] > 0) {
        [finalColletion addObject:result];
    }
}


我需要根据键'desc'的值筛选这个数组,并将其与字符串变量searchText进行比较(它应该返回该字符串在desc中任何位置存在的结果)。我希望返回的结构与原始数组相同——数组中包含字典。这是我的密码:

NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"desc contains[c] %@", searchText];
self.resultsArray = [self.charactersAndDescriptions filteredArrayUsingPredicate:resultPredicate];

问题是,self.resultsArray始终返回0个对象。我不明白为什么会这样。我在这里查看的问题是,他们只有一个字典数组,但找不到任何嵌套数组。希望你能帮忙,谢谢

我不确定你是否可以用一个谓词来完成。但是您可以遍历字典的单个数组,对它们进行过滤,并将过滤后的列表添加到最终数组中。试着这样做:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"desc contains[c] %@", searchText];
NSMutableArray *finalColletion = [NSMutableArray array];
for (NSArray *temp in self.charactersAndDescriptions) {
    NSArray *result =[temp filteredArrayUsingPredicate:predicate];
    if([result count] > 0) {
        [finalColletion addObject:result];
    }
}

我不确定你是否可以用一个谓词来完成。但是您可以遍历字典的单个数组,对它们进行过滤,并将过滤后的列表添加到最终数组中。试着这样做:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"desc contains[c] %@", searchText];
NSMutableArray *finalColletion = [NSMutableArray array];
for (NSArray *temp in self.charactersAndDescriptions) {
    NSArray *result =[temp filteredArrayUsingPredicate:predicate];
    if([result count] > 0) {
        [finalColletion addObject:result];
    }
}

我不确定你是否可以用一个谓词来完成。但是您可以遍历字典的单个数组,对它们进行过滤,并将过滤后的列表添加到最终数组中。试着这样做:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"desc contains[c] %@", searchText];
NSMutableArray *finalColletion = [NSMutableArray array];
for (NSArray *temp in self.charactersAndDescriptions) {
    NSArray *result =[temp filteredArrayUsingPredicate:predicate];
    if([result count] > 0) {
        [finalColletion addObject:result];
    }
}

我不确定你是否可以用一个谓词来完成。但是您可以遍历字典的单个数组,对它们进行过滤,并将过滤后的列表添加到最终数组中。试着这样做:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"desc contains[c] %@", searchText];
NSMutableArray *finalColletion = [NSMutableArray array];
for (NSArray *temp in self.charactersAndDescriptions) {
    NSArray *result =[temp filteredArrayUsingPredicate:predicate];
    if([result count] > 0) {
        [finalColletion addObject:result];
    }
}


由于它是一个多级数组,您必须进行深度搜索。我希望返回的结构与数组中字典的原始静态数组相同。如何进行深度搜索?因为它是一个多级数组,所以必须进行深度搜索。我希望返回的结构与数组中字典的原始静态数组相同。如何进行深度搜索?因为它是一个多级数组,所以必须进行深度搜索。我希望返回的结构与数组中字典的原始静态数组相同。如何进行深度搜索?因为它是一个多级数组,所以必须进行深度搜索。我希望返回的结构与数组中字典的原始静态数组相同。如何进行深度搜索?+1但检查
[result count]>0
将阻止代码生成与输入数组匹配的输出数组。不需要检查,因为当不存在匹配项时,
filteredArrayUsingPredicate
将返回有效的空数组。如果不存在匹配项,则“filteredArrayUsingPredicate”将返回空数组。。无需将其添加到最终的结果数组中。因此支票。。为什么它会从生成输出数组开始?它将生成有效的输出数组除非结果数组包含空数组,否则顶级数组索引将不匹配,但这可能重要,也可能不重要,取决于他如何使用结果数组。这确实重要,只是在填充数据源方法时简化了代码,所以我删除了if语句。非常感谢你们两位!这是拼图的最后一块,现在我的搜索工作非常顺利,今晚我可能会得到一些急需的休息+1但是检查
[result count]>0将阻止代码生成与输入数组匹配的输出数组。不需要检查,因为当不存在匹配项时,
filteredArrayUsingPredicate
将返回有效的空数组。如果不存在匹配项,则“filteredArrayUsingPredicate”将返回空数组。。无需将其添加到最终的结果数组中。因此支票。。为什么它会从生成输出数组开始?它将生成有效的输出数组除非结果数组包含空数组,否则顶级数组索引将不匹配,但这可能重要,也可能不重要,取决于他如何使用结果数组。这确实重要,只是在填充数据源方法时简化了代码,所以我删除了if语句。非常感谢你们两位!这是拼图的最后一块,现在我的搜索工作非常顺利,今晚我可能会得到一些急需的休息+1但是检查
[result count]>0将阻止代码生成与输入数组匹配的输出数组。不需要检查,因为当不存在匹配项时,
filteredArrayUsingPredicate
将返回有效的空数组。如果不存在匹配项,则“filteredArrayUsingPredicate”将返回空数组。。无需将其添加到最终的结果数组中。因此支票。。为什么它会从生成输出数组开始?它将生成有效的输出数组除非结果数组包含空数组,否则顶级数组索引将不匹配,但这可能重要,也可能不重要,取决于他如何使用结果数组。这确实重要,只是在填充数据源方法时简化了代码,所以我删除了if语句。非常感谢你们两位!这是拼图的最后一块,现在我的搜索工作非常顺利,今晚我可能会得到一些急需的休息+1但是检查
[result count]>0将阻止代码生成与输入数组匹配的输出数组。不需要检查,因为当不存在匹配项时,
filteredArrayUsingPredicate
将返回有效的空数组。如果不存在匹配项,则“filteredArrayUsingPredicate”将返回空数组。。无需将其添加到最终的结果数组中。因此支票。。为什么它会从生成输出数组开始?它将生成有效的输出数组除非结果数组包含空数组,否则顶级数组索引将不匹配,但这可能有问题,也可能没有问题,这取决于他如何处理