zoukankan      html  css  js  c++  java
  • iPhone开发:可爱的谓词,使用NSPredicate

    有点类似与SQL语句,主要功能使用来查找过滤数组,匹配字符串合数值。需要了解一点KVC。

    老老实实跟着apple来吧,先创建一个类Car,代码如下

    #import <Foundation/Foundation.h>

    @interface Car : NSObject {

    NSString *name;

    int power;

    }

    @property (nonatomic,retain) NSString *name;

    @property int power;

    +(id)carWithName:(NSString*)n P:(int)p;

    @end

    #import "Car.h"

    @implementation Car

    @synthesize name,power;

    +(id)carWithName:(NSString*)n P:(int)p{

    Car *c = [[[self alloc] init] autorelease];

    c.name = n;

    c.power = p;

    return c;

    }

    @end

    在使用的时候创建一个大的数组

    NSArray *array = [NSArray arrayWithObjects:

      [Car carWithName:@"m1" P:1],

      [Car carWithName:@"m2" P:2],

      [Car carWithName:@"m3" P:3],

      [Car carWithName:@"m4" P:4],

      [Car carWithName:@"m5" P:5],

      [Car carWithName:@"m6" P:6],

      [Car carWithName:@"m7" P:7],nil


    //我们象找出所有power 在某个范围的车,比如power<6,创建如下Predicate (这里可以用到所有的比较操作符)

    NSPredicate *pre = [NSPredicate predicateWithFormat:@"self.power<6"]; //self可以去掉

    //通过遍历输出我们要的结果

    for (Car *c in array) {

    if ([pre evaluateWithObject:c]) {

    NSLog(@"%@",c.name);

    }

    }


    但是这样做并不能简化我们的代码,我们还需要所有符合条件的集合,过滤器正好解决这一问题

    NSPredicate *pre = [NSPredicate predicateWithFormat:@"self.power<6"];

    NSArray *result = [array filteredArrayUsingPredicate:pre];  //result是我们需要的结果

    如果需要带多个参数,可以使用predicateWithSubstitutionVariables,后面的NSDictionary就是需要的键值对,通过关键字来获取值

    另外可以用BETWEEN,IN,BEGINWITH,ENDWITH,CONTAINS,LIKE这些谓词来构造NSPredicate,必要的时候使用SELF直接对自己进行匹配

  • 相关阅读:
    FR #3题解
    L3-005. 垃圾箱分布
    L2-004. 这是二叉搜索树吗?
    L2-002. 链表去重
    L1-009. N个数求和
    L3-003. 社交集群
    L3-004. 肿瘤诊断
    L2-001. 紧急救援
    L3-002. 堆栈
    L2-007. 家庭房产
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/2458476.html
Copyright © 2011-2022 走看看