你的位置:首页 > 操作系统

[操作系统]iOS NSArray数组过滤


 

需求:在一个数组里面,将在这个数组中的并且在另一个数组里面的元素过滤掉。

即:在一个数组dataArray里面,将在dataArray数组中的并且在filteredArray数组里面的元素过滤掉。

    //iOS-筛选数组内的元素    //在dataArray中里面,将在dataArray中的并且在filteredArray数组里面的元素过滤掉    //需要去掉的元素数组    NSMutableArray *filteredArray = [[NSMutableArray alloc]initWithObjects:@"1",@"3",@"9", nil];    //需要被筛选的数组    NSMutableArray *dataArray = [[NSMutableArray alloc]initWithObjects:@"1",@"2",@"3",@"1",@"1",@"3",@"1",@"5",@"7", nil];            /*     方法一:利用NSPredicate     注:NSPredicate所属Cocoa框架,在密码、用户名等正则判断中经常用到。     类似于SQL语句     NOT 不是     SELF 代表字符串本身     IN 范围运算符     那么NOT (SELF IN %@) 意思就是:不是这里所指定的字符串的值     */        NSPredicate * filterPredicate = [NSPredicate predicateWithFormat:@"NOT (SELF IN %@)",filteredArray];    //过滤数组    NSArray * reslutFilteredArray = [dataArray filteredArrayUsingPredicate:filterPredicate];    NSLog(@"Reslut Filtered Array = %@",reslutFilteredArray);            /*     方法二:从后往前遍历数组,然后匹配删除     */    int i = (int)[dataArray count]-1;    for(;i >= 0;i --){      //containsObject 判断元素是否存在于数组中(根据两者的内存地址判断,相同:YES 不同:NO)      if([filteredArray containsObject:[dataArray objectAtIndex:i]]) {        [dataArray removeObjectAtIndex:i];      }    }    NSLog(@"Data Array = %@",dataArray);