如何从NSArray中删除项目以创建过滤数组(NSPredicate)

时间:2014-05-07 22:30:59

标签: ios objective-c arrays cocoa-touch nspredicate

我有一个NSArray,我从我的数据库中取出,我正在使用有点蛮力的解决方案,我需要修改我的数据库的每个元素的内容。我正在使用这个NSPredicate来过滤我的数组

NSArray *array = [haveIngArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"ANY %@ contains[cd] self", recipeIngredientsArray]];

其中recipeIngredientArray是来自user的输入,hasIngArray是获取的内容。

这是我数据库内容的一个示例

1 piece of chicken breast
3 spoon of wheat
6 glass of water
1 can of corn
1 glass of lemon juice
salt

我会将输入与来自数据库的内容进行比较,但我不需要比较某些东西,如盐,水,胡椒。如何从我的数组中删除这些,以便我可以使用我的真实过滤器?

我尝试使用NSPredicate来包含并删除原始数组中的相同对象,但这会导致性能问题。

1 个答案:

答案 0 :(得分:0)

跳这有助于你...... 只需将您的数据库放入MutableArray,然后用您想要的任何单词过滤它

//enter the words you want to filter by
NSArray *filterArray = @[@"water",@"salt"];

NSArray *dataBaseArray = @[@"1 piece of chicken breast", @"3 spoon of wheat", @"6 glass of water", @"1 can of corn", @"1 glass of lemon juice",@"1 piece of chicken breast", @"3 spoon of wheat", @"6 glass of water", @"1 can of corn", @"1 glass of lemon juice"];

// this is the array that get the records from the DB
NSMutableArray *tempArray = [[NSMutableArray alloc]init];
for (int i=0; i <dataBaseArray.count; i++) {

    NSString *str = dataBaseArray[i];
    BOOL found = NO;
    for (NSString *word in filterArray) {

        if ([str rangeOfString:word].location != NSNotFound)
        {
            found = YES;
        }
    }
    if (!found) {
        [tempArray addObject:str];
    }

}

dataBaseArray = [[NSArray alloc]initWithArray:tempArray];