如果一个数组中的元素全部是字符串,我们想要过滤出符合条件的子数组,比如所有以“A”开头的字符串,我们一般的处理方法是遍历整个数组,然后字符串一个个比较,有没有更快捷的方式呢?
答案是肯定的,用谓词即NSPredicate可以实现快速的过滤。如下面的代码所示:
NSArray *locations = [NSArray arrayWithObjects:@"Apple", @"Orange", @"box", @"candan", @"kenrl", nil]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SELF contains[cd] %@)", @"A"]; NSArray *results = [locations filteredArrayUsingPredicate:predicate]; NSLog(@"results:%@", results);
通过上面的代码即可过滤出数组中含有"A"或者“a”的字符串。
NSPredicate还用在CoreData中的查询,如下面代码所示:
SetApp; NSManagedObjectContext *context = [app managedObjectContext]; NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease]; [request setEntity:[NSEntityDescription entityForName:@"CoreFilterList" inManagedObjectContext:context]]; [request setPredicate:[NSPredicate predicateWithFormat:@"listName like %@", name]];
NSError *err = nil; NSArray *ret = [context executeFetchRequest:request error:&err];
if(err != nil) { NSLog(@"DB error: %@", [err description]); }
return ret;
|
请发表评论