【问题标题】:Filter a NSMutableArray of objects and copy to a new NSArray过滤一个 NSMutableArray 对象并复制到一个新的 NSArray
【发布时间】:2011-11-18 15:55:05
【问题描述】:

我有一个 NSObject 定义了一些属性,为了简单起见,假设该对象称为 Vehicle 并且具有三个属性:制造商、型号、年份。

我从数据库中读取所有车辆,结果是车辆对象的 NSMutableArray。

我正在尝试创建一个由制造商过滤的新车辆数组,其中 object = "Ford"。

是正确的做法:

NSPredicate *fordMotorCarsPredicate = [NSPredicate predicateWithFormat:@"ANY   Vehicle.Manufacturer = %@", @"Ford"];

fordMotorCarsArray = [listOfVehicles filteredArrayUsingPredicate:fordMotorCarsPredicate];

我知道我可以使用 SQL 查询过滤列表,但我想知道这是否可以在 Objective-C 代码中实现。

有什么想法吗? 干杯, 罗斯。

【问题讨论】:

标签: iphone objective-c ios


【解决方案1】:

只有当底层对象对您正在测试的密钥符合 KVC 标准时,您才能使用谓词。但那个条件实际上是一个弱条件。例如,拥有该名称的属性就足够了。

现在您可以随时手动过滤数组:

- (NSMutableArray *) cars:(NSArray *)listOfVehicles builtBuy:(NSString*)manufacturer {
    NSMutableArray *resultCars = [[NSMutableArray alloc] init];
    for (Car *aCar in listOfVehicles) {
        if ([manufacturer isEqualToString:aCar.Manufacturer]) {
            [resultCars addObject:aCar];
        }
    }
    return [resultCars autorelease];
}

【讨论】:

    【解决方案2】:

    这是 NSPredicat 的替代品,但我不确定在您的情况下是否值得... sow 这就是您按字母顺序对数组进行排序的方式,

    somearray =[[NSMutableArray alloc] initWithArray:an array]; 
    
         NSSortDescriptor *sortDescriptor;
         sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"Vehicle" ascending:YES] autorelease];
         [somearray sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
    

    但是,如果您需要更具体的排序,您可以在排序描述符中添加一个选择器,以保存这样的排序逻辑

    NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"Vehicle" 升序:NO 选择器:@selector(VehicleSortingLogic:)];

    我之前从未将它与选择器一起使用,但它应该可以工作,希望这会有所帮助

    【讨论】:

      【解决方案3】:

      如果可变数组中的每个对象都有一个manufacturer 属性,那么谓词应该是

       [NSPredicate predicateWithFormat:@"manufacturer = %@", @"Ford"];
      

      【讨论】:

      • 谢谢。这是最简单的解决方案。感谢所有其他答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      相关资源
      最近更新 更多