Objective-C是否具有像C#一样的列表Lambda查询?

例如,我有一个简单的C#代码块:

IList list = new List(); list.Add("Objective-C"); list.Add("C#"); list.Add("C++"); list.Add("Java"); list.Add("Python"); var filteredList = list.Where(c => c.Contains("C")).ToList(); 

filteredList只包含“Objective-C”“C#”“C ++”

我想知道Objective-C是否支持使用像这样的lambda过滤对象列表(NSArray)的任何方法? 谢谢。

NSSetobjectsPassingTest:

 NSSet *set = [NSSet setWithArray:@[@"C#", @"Objective-C", @"Ruby"]]; NSSet *cSet = [set objectsPassingTest:^BOOL(NSString *language, BOOL *stop) { return [language rangeOfString:@"C"].location != NSNotFound; }]; NSLog(@"%@", cSet); 

为了使示例更容易,此代码假定该集合只有NSString对象。

对于NSArrays您可以使用indexesOfObjectsPassingTest: .

NSPredicates通常用于对集合进行排序和过滤。

 NSArray *array = @[@"Objective-C", @"C#", @"C++", @"Java", @"Python"]; NSPredicate *p = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) { return [((NSString *)evaluatedObject) rangeOfString:@"C"].location != NSNotFound; }]; NSArray *result = [array filteredArrayUsingPredicate:p]; 

这些谓词通常使用格式字符串而不是块,因为这些查询可以处理大多数情况,但是块可用,如图所示。

有关NSPredicates更多信息,请NSPredicates : https : //developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Predicates/predicates.html#//apple_ref/doc/uid/TP40001789