iOS NSArray数组过滤

时间:2024-01-18 18:31:44

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

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

        //iOS-筛选数组内的元素
//在dataArray中里面,将在dataArray中的并且在filteredArray数组里面的元素过滤掉
//需要去掉的元素数组
NSMutableArray *filteredArray = [[NSMutableArray alloc]initWithObjects:@"",@"",@"", nil];
//需要被筛选的数组
NSMutableArray *dataArray = [[NSMutableArray alloc]initWithObjects:@"",@"",@"",@"",@"",@"",@"",@"",@"", 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]-;
for(;i >= ;i --){
//containsObject 判断元素是否存在于数组中(根据两者的内存地址判断,相同:YES 不同:NO)
if([filteredArray containsObject:[dataArray objectAtIndex:i]]) {
[dataArray removeObjectAtIndex:i];
}
}
NSLog(@"Data Array = %@",dataArray);