NSPredicate使用

来源:互联网 发布:mac 移动硬盘绝对路径 编辑:程序博客网 时间:2024/05/17 09:39
// Cocoa用NSPredicate描述查询的方式,原理类似于在数据库中进行查询//基本的查询NSPredicate *predicate;predicate = [NSPredicate predicateWithFormat: @"name == 'Herbie'"];BOOL match = [predicate evaluateWithObject: car];NSLog (@"%s", (match) ? "YES" : "NO");// 在整个cars里面循环比较predicate = [NSPredicate predicateWithFormat: @"engine.horsepower > 150"];NSArray *cars = [garage cars];for (Car *car in [garage cars]) {    if ([predicate evaluateWithObject: car]) {        NSLog (@"%@", car.name);    }}// 输出完整的信息predicate = [NSPredicate predicateWithFormat: @"engine.horsepower > 150"];NSArray *results;results = [cars filteredArrayUsingPredicate: predicate];NSLog (@"%@", results);// 含有变量的谓词NSPredicate *predicateTemplate = [NSPredicate predicateWithFormat:@"name == $NAME"];NSDictionary *varDict;varDict = [NSDictionary dictionaryWithObjectsAndKeys:@"Herbie", @"NAME", nil];predicate = [predicateTemplate predicateWithSubstitutionVariables: varDict];NSLog(@"SNORGLE: %@", predicate);match = [predicate evaluateWithObject: car];NSLog (@"%s", (match) ? "YES" : "NO");// 注意不能使用$VARIABLE作为路径名,因为它值代表值// 谓词字符窜还支持c语言中一些常用的运算符predicate = [NSPredicate predicateWithFormat:             @"(engine.horsepower > 50) AND (engine.horsepower < 200)"];results = [cars filteredArrayUsingPredicate: predicate];NSLog (@"oop %@", results);predicate = [NSPredicate predicateWithFormat: @"name < 'Newton'"];results = [cars filteredArrayUsingPredicate: predicate];NSLog (@"%@", [results valueForKey: @"name"]);// 强大的数组运算符predicate = [NSPredicate predicateWithFormat:             @"engine.horsepower BETWEEN { 50, 200 }"];results = [cars filteredArrayUsingPredicate: predicate];NSLog (@"%@", results);NSArray *betweens = [NSArray arrayWithObjects:                     [NSNumber numberWithInt: 50], [NSNumber numberWithInt: 200], nil];predicate = [NSPredicate predicateWithFormat: @"engine.horsepower BETWEEN %@", betweens];results = [cars filteredArrayUsingPredicate: predicate];NSLog (@"%@", results);predicateTemplate = [NSPredicate predicateWithFormat: @"engine.horsepower BETWEEN $POWERS"];varDict = [NSDictionary dictionaryWithObjectsAndKeys: betweens, @"POWERS", nil];predicate = [predicateTemplate predicateWithSubstitutionVariables: varDict];results = [cars filteredArrayUsingPredicate: predicate];NSLog (@"%@", results);// IN运算符predicate = [NSPredicate predicateWithFormat: @"name IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }"];results = [cars filteredArrayUsingPredicate: predicate];NSLog (@"%@", [results valueForKey: @"name"]);predicate = [NSPredicate predicateWithFormat: @"SELF.name IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }"];results = [cars filteredArrayUsingPredicate: predicate];NSLog (@"%@", [results valueForKey: @"name"]);names = [cars valueForKey: @"name"];predicate = [NSPredicate predicateWithFormat: @"SELF IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }"];results = [names filteredArrayUsingPredicate: predicate];//这里限制了SELF的范围NSLog (@"%@", results);// BEGINSWITH,ENDSWITH,CONTAINS// 附加符号,[c],[d],[cd],c表示不区分大小写,d表示不区分发音字符,cd表示什么都不区分predicate = [NSPredicate predicateWithFormat: @"name BEGINSWITH 'Bad'"];results = [cars filteredArrayUsingPredicate: predicate];NSLog (@"%@", results);predicate = [NSPredicate predicateWithFormat: @"name BEGINSWITH 'HERB'"];results = [cars filteredArrayUsingPredicate: predicate];NSLog (@"%@", results);predicate = [NSPredicate predicateWithFormat: @"name BEGINSWITH[cd] 'HERB'"];results = [cars filteredArrayUsingPredicate: predicate];NSLog (@"%@", results);// LIKE运算符(通配符)predicate = [NSPredicate predicateWithFormat: @"name LIKE[cd] '*er*'"];results = [cars filteredArrayUsingPredicate: predicate];NSLog (@"%@", results);predicate = [NSPredicate predicateWithFormat: @"name LIKE[cd] '???er*'"];results = [cars filteredArrayUsingPredicate: predicate];NSLog (@"%@", results);

原创粉丝点击