使用 NSPredicate 过滤 NSArray
Filtering NSArray with NSPredicate
这是我的代码:
-(NSArray *)searchTeamsWithPlayerPharse:(NSMutableArray *)teams phrase:(NSString *)phrase
{
NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@"rel_Players.fullName CONTAINS[c] %@" ,phrase];
NSArray *searchResult = [teams filteredArrayUsingPredicate:searchPredicate];
return searchResult ;
}
它不起作用。在数组中我有团队对象。团队与球员有关系,我想过滤这种关系,发现只有球员的球队在 fullName 中有 pharse。如何改变这个 NSPredicate
ANY
运算符应该工作:
NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@"ANY rel_Players.fullName CONTAINS[c] %@" ,phrase];
一些补充说明:
- a
rel_
前缀不常见且不必要:复数形式 players 就足够了,下划线可以省略,因为新单词的开头是大写字符(驼峰式)。
- 该方法不需要采用可变数组参数。这将用例限制为
NSMutableArray
类型的参数。如果将参数类型更改为 NSArray *
,则可以同时使用 NSArray
和 NSMutableArray
. 的实例
- 该方法不适用于实例上下文:它没有对
self
的单一访问权限。你可以用它做一个函数,或者——我更喜欢——让它成为 NSArray
. 的方法
综合起来:
@interface NSArray(TeamPlayerAddition)
-(NSArray *)teamsWithPlayerPharse:(NSString *)phrase
@end
@implementation NSArray(TeamPlayerAddition)
-(NSArray *)teamsWithPlayerPharse:(NSString *)phrase
{
NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@"ANY rel_Players.fullName CONTAINS[c] %@" ,phrase];
return [self filteredArrayUsingPredicate:searchPredicate];
}
@end
这是我的代码:
-(NSArray *)searchTeamsWithPlayerPharse:(NSMutableArray *)teams phrase:(NSString *)phrase
{
NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@"rel_Players.fullName CONTAINS[c] %@" ,phrase];
NSArray *searchResult = [teams filteredArrayUsingPredicate:searchPredicate];
return searchResult ;
}
它不起作用。在数组中我有团队对象。团队与球员有关系,我想过滤这种关系,发现只有球员的球队在 fullName 中有 pharse。如何改变这个 NSPredicate
ANY
运算符应该工作:
NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@"ANY rel_Players.fullName CONTAINS[c] %@" ,phrase];
一些补充说明:
- a
rel_
前缀不常见且不必要:复数形式 players 就足够了,下划线可以省略,因为新单词的开头是大写字符(驼峰式)。 - 该方法不需要采用可变数组参数。这将用例限制为
NSMutableArray
类型的参数。如果将参数类型更改为NSArray *
,则可以同时使用NSArray
和NSMutableArray
. 的实例
- 该方法不适用于实例上下文:它没有对
self
的单一访问权限。你可以用它做一个函数,或者——我更喜欢——让它成为NSArray
. 的方法
综合起来:
@interface NSArray(TeamPlayerAddition)
-(NSArray *)teamsWithPlayerPharse:(NSString *)phrase
@end
@implementation NSArray(TeamPlayerAddition)
-(NSArray *)teamsWithPlayerPharse:(NSString *)phrase
{
NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@"ANY rel_Players.fullName CONTAINS[c] %@" ,phrase];
return [self filteredArrayUsingPredicate:searchPredicate];
}
@end