一. NSPredicate(谓词)
A definition of logical conditions used to constrain a search either for a fetch or for in-memory filtering.
NSPredicate相当于存放一个过滤器的过滤条件,然后根据这个条件进行过滤。
二. NSPredicate使用
+ (NSPredicate *)predicateWithFormat:(NSString *)predicateFormat, ...;
以上方法的参数predicateFormat中,包含的运算符如下:
1. 比较运算符:=或==、>=、<=、!=或<>、>、<
NSPredicate *predicate = [NSPredicate predicateWithFormat:@“SELF = 123”];
BOOL answer = [predicate evaluateWithObject:@"是否包含123"];
// 返回的结果是YES
2. 逻辑运算符:AND或&&、OR或||、NOT或!
NSPredicate *predicate = [NSPredicate predicateWithFormat:@“SELF > 2 && SELF < 8”];
BOOL answer = [predicate evaluateWithObject:@"9"];
// 返回的结果是NO
3. 字符串比较运算符
BEGINSWITH:是否以指定的字符串开头
SELF BEGINSWITH “a”
SELF BEGINSWITH[cd] “café”
ENDSWITH:是否以指定的字符串结尾
CONTAINS:是否包含指定的字符串
LIKE:是否匹配指定字符串模板
SELF LIKE ‘ab’ (包含)
SELF LIKE ‘?ab’ (第2、3个字符为ab)
MATCHES:是否匹配指定的正则表达式(正则表达式的执行效率最低,但功能强大,最为常用)
ENDSWITH举例:
// 获取temp目录下的所有文件路径
NSArray *allfilesPaths = [fileManager contentsOfDirectoryAtPath:NSTemporaryDirectory() error:nil];
// 取得所有后缀是caf的文件
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self ENDSWITH .caf"];
NSArray *allAudioPaths = [allfilesPaths filteredArrayUsingPredicate:predicate];
// 结果allAudioPaths中,得到所有后缀为.caf的文件
ps:[c]忽略大小写[d]忽略重音符号[cd]忽略大小写和重音符号
4. 集合运算符
ANY、SOME:任意一个元素满足条件,返回YES
ALL:所有元素都满足条件,返回YES
NONE:没有任何元素满足条件,返回YES
IN:等价SQL中的IN运算符,当右边内容包含左边时,返回YES
// 数组过滤掉另外一个数组的所有数据
NSPredicate *predicate = [NSPredicate predicateWithFormat:@“NOT(SELF IN %@)”,array];
[source filteredArrayUsingPredicate:predicate];