簡體   English   中英

過濾對象的NSMutableArray並復制到新的NSArray

[英]Filter a NSMutableArray of objects and copy to a new NSArray

我有一個定義了一些屬性的NSObject,為了使這個問題簡單,我們假設該對象稱為Vehicle,並且具有三個屬性:Manufacturer,Model,Year。

我從數據庫中讀取了所有車輛,結果是一個NSMutableArray of Vehicle對象。

我正在嘗試創建由制造商篩選的對象=“福特”的車輛的新陣列。

是正確的方法:

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

fordMotorCarsArray = [listOfVehicles filteredArrayUsingPredicate:fordMotorCarsPredicate];

我知道我可以使用SQL查詢來過濾列表,但是我想知道是否可以在Objective-C代碼中實現。

有任何想法嗎? 干杯,羅斯。

如果可變數組中的每個對象都具有manufacturer屬性,則謂詞應為

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

僅當基礎對象針對要測試的密鑰符合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];
}

Ther是NSPredicat的替代品,但是我不確定這是否值得。

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” ascending:NO selector:@selector(VehicleSortingLogic :)];

我以前從未將它與選擇器一起使用過,但是它應該可以工作,希望這會有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM