Objective-C是否具有类似于C#的列表Lambda查询?

Objective-C是否具有类似于C#的列表Lambda查询?,c#,objective-c,linq,lambda,C#,Objective C,Linq,Lambda,例如,我有一个简单的C代码块: IList list=new list(); 列表。添加(“目标C”); 列表。添加(“C#”); 添加(“C++”); 添加(“Java”); 添加(“Python”); var filteredList=list.Where(c=>c.Contains(“c”).ToList(); filteredList将只包含“Objective-C”、“C”和“C++” 我想知道Objective-C是否支持使用lambda这样的方法来过滤对象列表(NSArray)?

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

IList list=new list();
列表。添加(“目标C”);
列表。添加(“C#”);
添加(“C++”);
添加(“Java”);
添加(“Python”);
var filteredList=list.Where(c=>c.Contains(“c”).ToList();
filteredList将只包含“Objective-C”“C”“C++”


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

NSSet
objectsPassingTest:

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
对象


对于
nsarray
您可以使用
索引对象分配测试:

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];
这些谓词通常使用格式字符串而不是块来生成,因为这些查询可以处理大多数情况,但块是可用的,如图所示

有关预测的更多信息,请参见:

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];