使用NSPredicate在NSArray中查找值

使用NSArray 查找的值:

NSArray *arr = [NSArray arrayWithObjects:@"299-1-1", @"299-2-1", @"299-3-1", @"399-1-1", @"399-2-1", @"399-3-1", @"499-1-1", @"499-2-1", @"499-3-1", nil];
NSString *search = @"299";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS %@",[NSString stringWithFormat:@"%@", search]];
NSArray *array = [arr filteredArrayUsingPredicate: predicate];
NSLog(@"result: %@", array);

期望的Found Result :

result: (
 "299-1-1",
 "299-2-1",
 "299-3-1"
 )

但是对于NSArray中带有NSSting的NSArray:

NSArray *arr = [NSArray arrayWithObjects:[NSArray arrayWithObjects:@"299-1-1", nil],[NSArray arrayWithObjects:@"399-1-1", nil],[NSArray arrayWithObjects:@"499-1-1", nil], nil];

这里的predicate syntax是什么?

ChatGPT尝试为您解答,仅供参考
您可以使用SUBQUERY运算符来查询嵌套的数组。您可以使用以下语法来查询嵌套的数组:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(SELF, $x, $x CONTAINS %@).@count > 0", search];

这将在嵌套的数组中搜索每个字符串是否包含搜索字符串。如果存在一个字符串包含搜索字符串,则这个嵌套的数组将包含在结果中。


例如,对于您提供的数组,您可以使用以下代码来查找包含字符串"299"的嵌套的数组:

NSArray *arr = [NSArray arrayWithObjects:[NSArray arrayWithObjects:@"299-1-1", nil],[NSArray arrayWithObjects:@"399-1-1", nil],[NSArray arrayWithObjects:@"499-1-1", nil], nil];
NSString *search = @"299";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(SELF, $x, $x CONTAINS %@).@count > 0", search];
NSArray *array = [arr filteredArrayUsingPredicate: predicate];
NSLog(@"result: %@", array);

输出应该是:

result: (
    (
        "299-1-1"
    )
)