Cocoa过滤器NSPredicate的完全用法

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


[cpp] view plain copy print ?
  1. Cocoa用NSPredicate描述查询的方式,原理类似于在数据库中进行查询  

  2. 计算谓词:  

  3. //基本的查询

  4. NSPredicate *predicate;  

  5. predicate = [NSPredicate predicateWithFormat: @"name == 'Herbie'"];  

  6. BOOL match = [predicate evaluateWithObject: car];  

  7.    NSLog (@"%s", (match) ? "YES" : "NO");  


  8. //在整个cars里面循环比较

  9.    predicate = [NSPredicate predicateWithFormat: @"engine.horsepower > 150"];  

  10.    NSArray *cars = [garage cars];  

  11. for (Car *car in [garage cars]) {  

  12. if ([predicate evaluateWithObject: car]) {  

  13.            NSLog (@"%@", car.name);  

  14.        }  

  15.    }  


  16. //输出完整的信息

  17.    predicate = [NSPredicate predicateWithFormat: @"engine.horsepower > 150"];  

  18.    NSArray *results;  

  19.    results = [cars filteredArrayUsingPredicate: predicate];  

  20.    NSLog (@"%@", results);  


  21. //含有变量的谓词

  22.    NSPredicate *predicateTemplate = [NSPredicate predicateWithFormat:@"name == $NAME"];  

  23.    NSDictionary *varDict;  

  24.    varDict = [NSDictionary dictionaryWithObjectsAndKeys:  

  25.               @"Herbie", @"NAME", nil];  

  26.    predicate = [predicateTemplate predicateWithSubstitutionVariables: varDict];  

  27.    NSLog(@"SNORGLE: %@", predicate);  

  28.    match = [predicate evaluateWithObject: car];  

  29.  NSLog (@"%s", (match) ? "YES" : "NO");  

  30. //注意不能使用$VARIABLE作为路径名,因为它值代表值


  31. //谓词字符窜还支持c语言中一些常用的运算符  

  32.    predicate = [NSPredicate predicateWithFormat:  

  33.                 @"(engine.horsepower > 50) AND (engine.horsepower < 200)"];  

  34.    results = [cars filteredArrayUsingPredicate: predicate];  

  35.    NSLog (@"oop %@", results);  


  36.    predicate = [NSPredicate predicateWithFormat: @"name < 'Newton'"];  

  37.    results = [cars filteredArrayUsingPredicate: predicate];  

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


  39. //强大的数组运算符

  40.    predicate = [NSPredicate predicateWithFormat:  

  41.                 @"engine.horsepower BETWEEN { 50, 200 }"];  

  42.    results = [cars filteredArrayUsingPredicate: predicate];  

  43.    NSLog (@"%@", results);  


  44.    NSArray *betweens = [NSArray arrayWithObjects:  

  45.                         [NSNumber numberWithInt: 50], [NSNumber numberWithInt: 200], nil];  

  46.    predicate = [NSPredicate predicateWithFormat: @"engine.horsepower BETWEEN %@", betweens];  

  47.    results = [cars filteredArrayUsingPredicate: predicate];  

  48.    NSLog (@"%@", results);  

  49.    predicateTemplate = [NSPredicate predicateWithFormat: @"engine.horsepower BETWEEN $POWERS"];  

  50.    varDict = [NSDictionary dictionaryWithObjectsAndKeys: betweens, @"POWERS", nil];  

  51.    predicate = [predicateTemplate predicateWithSubstitutionVariables: varDict];  

  52.    results = [cars filteredArrayUsingPredicate: predicate];  

  53.    NSLog (@"%@", results);  


  54. //IN运算符

  55.    predicate = [NSPredicate predicateWithFormat: @"name IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }"];  

  56.    results = [cars filteredArrayUsingPredicate: predicate];  

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

  58.    predicate = [NSPredicate predicateWithFormat: @"SELF.name IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }"];  

  59.    results = [cars filteredArrayUsingPredicate: predicate];  

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


  61.    names = [cars valueForKey: @"name"];  

  62.    predicate = [NSPredicate predicateWithFormat: @"SELF IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }"];  

  63.    results = [names filteredArrayUsingPredicate: predicate];//这里限制了SELF的范围

  64.    NSLog (@"%@", results);  

  65. //BEGINSWITH,ENDSWITH,CONTAINS


  66. //附加符号,[c],[d],[cd],c表示不区分大小写,d表示不区分发音字符,cd表示什么都不区分

  67.    predicate = [NSPredicate predicateWithFormat: @"name BEGINSWITH 'Bad'"];  

  68.    results = [cars filteredArrayUsingPredicate: predicate];  

  69.    NSLog (@"%@", results);  


  70.    predicate = [NSPredicate predicateWithFormat: @"name BEGINSWITH 'HERB'"];  

  71.    results = [cars filteredArrayUsingPredicate: predicate];  

  72.    NSLog (@"%@", results);  


  73.    predicate = [NSPredicate predicateWithFormat: @"name BEGINSWITH[cd] 'HERB'"];  

  74.    results = [cars filteredArrayUsingPredicate: predicate];  

  75.    NSLog (@"%@", results);  


  76. //LIKE运算符(通配符)

  77.    predicate = [NSPredicate predicateWithFormat: @"name LIKE[cd] '*er*'"];  

  78.    results = [cars filteredArrayUsingPredicate: predicate];  

  79.    NSLog (@"%@", results);  


  80.    predicate = [NSPredicate predicateWithFormat: @"name LIKE[cd] '???er*'"];  

  81.    results = [cars filteredArrayUsingPredicate: predicate];  

  82.    NSLog (@"%@", results);  


你可能感兴趣的:(Cocoa过滤器NSPredicate的完全用法)