iOS NDPredicate与数组过滤

13 篇文章 0 订阅

在过滤数组的过程中有两种方法,一种是写for去做判断。另一种就是使用系统自带的filteredArrayUsingPredicatepredicateWithFormat这两个方法。
两种方法的使用区别如下:

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];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值