实用知识:NSPredicate(谓词)的使用

#import "ViewController.h"
#import "Person.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

    [self test3];
}

- (void)test3{

    Person *p1 = [Person new];
    p1.name = @"张三";
    p1.age = 14;

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.age > 15"];

    //使用谓词评估对象
    BOOL result = [predicate evaluateWithObject:p1];

    if (result) {

        NSLog(@"大于15岁");
    }else{

        NSLog(@"小于15岁");
    }


}


- (void)test2{

    Person *p1 = [Person new];
    p1.name = @"张三";
    p1.age = 18;

    Person *p2 = [Person new];
    p2.name = @"李四";
    p2.age = 17;

    Person *p3 = [Person new];
    p3.name = @"王五";
    p3.age = 14;

    Person *p4 = [Person new];
    p4.name = @"张扇风";
    p4.age = 20;

    Person *p5 = [Person new];
    p5.name = @"张点";
    p5.age = 15;

    NSArray *persons = @[p1,p2,p3,p4,p5];

    //查找包含'张'的人
    NSString *name = @"张三";
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.name == %@",name];

    NSArray *results = [persons filteredArrayUsingPredicate:predicate];

    NSLog(@"%@",[results valueForKey:@"name"]);

    for (Person *p in results) {
        NSLog(@"%@",p.name);
    }

}

- (void)test1{

    NSArray *array = @[@"23451345",@"2222435",@"54674578",@"dryjtuj",@"467222"];

    //筛选出字符串含有 "222" 的字符串

    //谓词(条件)-语句不区分大小写
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self CONTAINS '222'"];

    //使用谓词去过滤
    NSArray *results = [array filteredArrayUsingPredicate:predicate];

    NSLog(@"%@",results);


}

@end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用NSPredicate的Swift代码示例,用于将大量数据按时间分组: ```swift struct DataItem { let name: String let timeStamp: TimeInterval // 时间戳 } func groupDataByTime(_ data: [DataItem]) -> [[DataItem]] { // 将数据按时间先后排序 let sortedData = data.sorted { $0.timeStamp < $1.timeStamp } // 创建空字典 var groups = [String: [DataItem]]() // 使用NSPredicate过滤并分组数据 let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd" for item in sortedData { let date = Date(timeIntervalSince1970: item.timeStamp) let dateString = dateFormatter.string(from: date) let predicate = NSPredicate(format: "SELF.dateString == %@", dateString) let filteredArray = (groups as NSDictionary).filtered(using: predicate) if var items = filteredArray.first?.value as? [DataItem] { items.append(item) groups[dateString] = items } else { groups[dateString] = [item] } } // 将分组后的数据按时间先后顺序排序 let sortedGroups = groups.sorted { $0.key < $1.key } // 将所有分组添加到一个数组中 var result = [[DataItem]]() for (_, items) in sortedGroups { result.append(items) } return result } ``` 在这个示例中,我们同样定义了一个`DataItem`结构体来表示数据的名称和时间戳。`groupDataByTime`函数首先将数据按时间先后排序,然后使用`NSPredicate`过滤并分组数据。我们指定`NSPredicate`的格式为`SELF.dateString == %@`,其中`dateString`是我们根据时间戳计算得到的时间字符串,`%@`是用于替换的占位符。通过对字典进行过滤,我们可以得到一个包含指定时间字符串的数组,然后将新的数据项添加到这个数组中。最后,我们将所有分组添加到一个大数组中,按时间先后顺序排序,并返回结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值