在过滤数组的过程中有两种方法,一种是写for去做判断。另一种就是使用系统自带的filteredArrayUsingPredicate
和predicateWithFormat
这两个方法。
两种方法的使用区别如下:
predicateWithFormat 是无返回值过滤,在原数组内部过滤
filteredArrayUsingPredicate 有返回值过滤
字符串数组操作常用方法
以上两种过滤方法都需要传入一个人NDPredicate也就是谓词(过滤条件)去判断。长江的过滤方法有以下三种。
/*
BEGINSWITH :以某个字符串开头
ENDSWITH :以某个字符串结尾
CONTAINS :是否包含某个字符串
*/
使用BEGINSWITH进行过滤
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"Nick", @"Ben", @"Adam", @"Melissa",@"你好",nil];//定义数组
NSArray *tempArray = [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF beginswith[c] 'a'"]];//过滤以a自负开头的元素
结果如下
(Adam)
使用CONTAINS进行过滤
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"Nick", @"Ben", @"Adam", @"Melissa",@"你好",nil];//定义数组
NSArray *tempArray2 = [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF contains[c] 'e'"]]; //包含有e的元素
结果如下
(Ben,Melissa)
使用ENDSWITH进行过滤
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"Nick", @"Ben", @"Adam", @"Melissa",@"你好",nil];//定义数组
NSArray *tempArray3 = [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF endswith[c] 'a'"]]; //以a结尾的元素
结果如下
(Melissa)
除了使用以上三种写法 还可以使用like
关键字,例如
过滤中间有e 的元素
NSArray *tempArray4 = [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF like[cd] '*e*' "]];
输出结果如下:
( Ben, Melissa)
过滤以N开头的元素
NSArray *tempArray5 = [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF like 'N*' "]];
输出结果如下:
//(Nick)
数字数组操作常用方法
in关键字
SELF 代表本身 IN可以大写也可以小写
NSArray *array1 = [NSArray arrayWithObjects:@1,@2,@3,@4,@5,@6,@7,@8, nil];
NSArray *array2 = [NSArray arrayWithObjects:@4,@6, nil];
NSArray *temp = [array1 filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF in%@",array2]]; //表示获取 array2 和 array1中的交集
其中temp的值为
(4, 6)
not关键字
NSArray *array1 = [NSArray arrayWithObjects:@1,@2,@3,@4,@5,@6,@7,@8, nil];
NSArray *array2 = [NSArray arrayWithObjects:@4,@6, nil];
NSArray *temp2 = [array1 filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"not (SELF in%@)",array2]];
输出结果如下:
(1,2,3,5,7,8)
BETWEEN
关键字
NSArray *array1 = [NSArray arrayWithObjects:@1,@2,@3,@4,@5,@6,@7,@8, nil];
NSArray *array2 = [NSArray arrayWithObjects:@4,@6, nil];
NSArray *temp3 = [array1 filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF BETWEEN{2,5}"]];//表示array1中的范围为2-5
输出结果如下:
( 2,3,4,5)
=
关键字
NSArray *array1 = [NSArray arrayWithObjects:@1,@2,@3,@4,@5,@6,@7,@8, nil];
NSArray *array2 = [NSArray arrayWithObjects:@4,@6, nil];
NSArray *temp4 = [array1 filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF = 3"]];//值等于3
输出结果为
(3)
MATCHES关键字
常用于正则表达式
例如:
- (BOOL) isValidateMobile:(NSString *)mobile
{
//手机号以1开头,9个 \d 数字字符^1[3|4|5|8] \d{9}$
NSString *phoneRegex = @"^(0|86|17951)?(19[0-9]|16[0-9]|13[0-9]|15[0-9]|17[0-9]|18[0-9]|14[0-9])[0-9]{8}$";
NSPredicate * phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",phoneRegex];
return [phoneTest evaluateWithObject:mobile];
}