[英]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.