如何使用NSPredicate过滤这些NSArray?

时间:2013-10-01 08:02:40

标签: objective-c nsarray nspredicate

-(void) vUpdateHistoryAndSuggestionEntries
{
    NSArray * potentialHistory = [[self class] arHistory];
}

potentialHistory是NSString个对象的数组。

我想过滤仅以不区分大小写的方式开头的元素,例如@“Cat”。例如,

如果NSArray包含

凯西 猫 狗

然后我想要一个包含

的数组

凯西 猫

我认为NSPredicate对此非常理想。任何其他方式都可以。

有类似的问题。但是,在那些问题中,NSArray包含字典。我想根据数组的实际元素而不是数组元素的元素进行过滤。

4 个答案:

答案 0 :(得分:2)

NSArray *yourArray;
NSPredicate *aPredicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c] 'C'"];
NSArray *theFilteredArray = [yourArray filteredArrayUsingPredicate:aPredicate];

希望这会对您有所帮助。

答案 1 :(得分:0)

以下是如何使用NSPredicate的示例:

NSArray *sampleArray = @[@"Cathy", @"Cat", @"Dog"];
NSArray *filteredSampleArray = [sampleArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self contains[c] %@",@"ca"]];
NSLog(@"%@",filteredSampleArray);

这将输出:

(     凯蒂,     猫 )

答案 2 :(得分:0)

NSString *filterStr = [NSString stringWithFormat:@"name LIKE[c] '*%1$@*'",searchStr];
NSPredicate *predicate = [NSPredicate predicateWithFormat:filterStr];
NSMutableArray *tempArray = [yourArrayofNames filteredArrayUsingPredicate:predicate];

//此处name是您的属性,yourArrayofNames是您的对象数组。

答案 3 :(得分:-1)

您不需要NSPredicate就可以了。

for (NSString* item in arHistory){

    if ([item rangeOfString:@"cat" options:NSCaseInsensitiveSearch].location == 0){//occurs at beginning

        [potentialHistory addObject:item];
    }
}

编辑:如果potentialHistory是不可变的,请使用另一个数组来存储这些和init potentialHistory。

NSArray* potentialArray = [NSArray arrayWithArray:(NSArray*)array]