// 1、使用kvc
NSArray *array = @[@"tom",@"lily",@"Games"];
NSLog(@"%@",[array valueForKeyPath:@"length"]);
NSLog(@"%@",[array valueForKeyPath:@"@max.length"]);
NSArray *array1 = @[@1, @2, @2, @2, @2, @3,@7,@8];
//先取不重复的子集,然后计算总和
//注意@distinctUnionOfObjects和@sum不能直接在一个keyPath中连接,所以需要两次调用valueForKeyPath
NSLog(@"%@",[[array1 valueForKeyPath:@"@distinctUnionOfObjects.self"] valueForKeyPath:@"@sum.self"]);
// 2、使用NSPredicate
NSArray *arr2 = @[@"apple",@"pera",@"banana"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"length > 4"];
NSLog(@"%@",[arr2 filteredArrayUsingPredicate:predicate]);
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"SELF ENDSWITH 'e' OR length > 5"];
NSLog(@"%@",[arr2 filteredArrayUsingPredicate:predicate1]);
NSArray *arr3 = @[@"pig",@"beautiful",@"sunday",@"four"];
NSPredicate *predicate2 = [NSPredicate predicateWithBlock:^BOOL(id _Nullable evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {
NSString *str = evaluatedObject;
return [str hasSuffix:@"y"] || str.length > 5;
}];
NSLog(@"%@",[arr3 filteredArrayUsingPredicate:predicate2]);
// 3.使用集合本身的passingTest相关方法
NSIndexSet *indexSet = [arr3 indexesOfObjectsWithOptions:NSEnumerationReverse passingTest:^BOOL(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSString *str = obj;
if ([str hasSuffix:@"y"] || str.length > 5) {
// *stop = YES;
return YES;
}
return NO;
}];
NSLog(@"%@",[arr3 objectsAtIndexes:indexSet]);
使用KVC, NSPredicate, passingTest筛选集合
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 前言 在开发中,我们经常会遇到一些需要,让我们从集合中查找某个值,从集合中过滤想要的内容等等,因而我们就需要遍历集...
- hello!大家好,简单的自我介绍一下,本人97年的小巨蟹,你们可以喊我张小菊,我是16年暑假做的双眼皮手术,目前...