gpt4 book ai didi

ios - 如何使用键对嵌套数组进行谓词

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:54:34 24 4
gpt4 key购买 nike

我有一个名为 self.eventsArray 的数组,如下所示:

[ 
{
"artist": [
{
"artist_name": "Dillon Francis",
"name": "Dillon Francis",
},
{
"artist_name": "Major Lazer",
"name": "Major Lazer",
},
{
"artist_name": "Flosstradamus ",
"name": "Flosstradamus",
}
],
"name": "Mad Decent Block Party NYC",
},
{
"artist": [
{
"artist_name": "Ryan Raddon",
"name": "Kaskade",
}
],
"name": "Kaskade Atmosphere Tour NYC",
},
]

我一直在尝试使用 NSPredicate 过滤它两次。当用户搜索时,需要按名称(在艺术家数组中)或名称(在顶级数组中)进行过滤。

NSPredicate *predicateEventsByName = [NSPredicate predicateWithFormat:@"SELF.%K contains[c] %@",@"name",searchText];
NSPredicate *predicateEventsByArtistName = [NSPredicate predicateWithFormat:@"SELF.%K.%K contains[c] %@",@"artist",@"name",searchText];

NSMutableArray *unfilteredEventsArray = [[NSMutableArray alloc] initWithCapacity:0];
unfilteredEventsArray = [NSMutableArray arrayWithArray:[self.eventsArray filteredArrayUsingPredicate:predicateEventsByName]];
[unfilteredEventsArray addObjectsFromArray:[self.eventsArray filteredArrayUsingPredicate:predicateEventsByArtistName]];


[self.filteredEventsArray addObjectsFromArray:[[NSSet setWithArray:unfilteredEventsArray] allObjects]];

使用此代码,self.filteredEventsArray 将填充与顶级 “name” 匹配的任何搜索词。它不会为嵌套的艺术家 "name" 提供任何搜索结果。我怀疑它不会搜索嵌套数组的原因是因为这一行:

NSPredicate *predicateEventsByArtistName = [NSPredicate predicateWithFormat:@"SELF.%K.%K contains[c] %@",@"artist",@"name",searchText];

但我不知道如何更改 predicateWithFormat: 以使其搜索嵌套数组。

最佳答案

“艺术家”是一个数组,因此您必须在谓词中使用“ANY”:

[NSPredicate predicateWithFormat:@"ANY %K.%K CONTAINS[c] %@",
@"artist",@"name",searchText];

请注意,不是手动构建搜索结果的“联合”,你可以使用“复合谓词”:

NSPredicate *predicate = [NSCompoundPredicate orPredicateWithSubpredicates:
@[predicateEventsByName, predicateEventsByArtistName]];
self.filteredEventsArray = [self.eventsArray filteredArrayUsingPredicate:predicate];

关于ios - 如何使用键对嵌套数组进行谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18240373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com