您的位置:首页 > 其它

Cocoa过滤器NSPredicate

2015-10-30 09:14 225 查看
从下面的各个例子中,可以体会到NSPredicate的强大的能力,作为正则表达式的核心类,确实优化了很多的字符串及其正则相关的操作的流程。使代码简洁,而强大!

[cpp] view
plaincopyprint?

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: