简体   繁体   English

过滤包含自定义对象的NSArray

[英]Filter an NSArray which contains custom objects

I have UISearchBar , UITableView , a web service which returns a NSMutableArray that contain objects like this: 我有UISearchBarUITableView ,一个Web服务,它返回一个包含如下对象的NSMutableArray

//Food.h
Food : NSObject { 
    NSString *foodName;
    int idFood;
}

@property (nonatomic, strong) NSString *foodName;

And the array: 而阵列:

Food *food1 = [Food alloc]initWithName:@"samsar" andId:@"1"];
Food *food2 = [Food alloc] initWithName:@"rusaramar" andId:@"2"];

NSSarray *array = [NSArray arrayWithObjects:food1, food2, nil];

How do I filter my array with objects with name beginning with "sa"? 如何使用名称以“sa”开头的对象过滤我的数组?

You can filter any array like you'd like to with the following code: 您可以使用以下代码过滤任何您想要的数组:

NSMutableArray *array = ...;

[array filterUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
    return [evaluatedObject.foodName hasPrefix:searchBar.text];
}];

This will filter the array "in-place" and is only accessible on an NSMutableArray . 这将“就地”过滤数组,并且只能在NSMutableArray上访问。 If you'd like to get a new array that's been filtered for you, use the filteredArrayUsingPredicate: NSArray method. 如果您想获得一个已经过滤的新数组,请使用filteredArrayUsingPredicate: NSArray方法。

NSString *predString = [NSString stringWithFormat:@"(foodName BEGINSWITH[cd] '%@')", @"sa"];

NSPredicate *pred = [NSPredicate predicateWithFormat:predString];

NSArray *array = [arr filteredArrayUsingPredicate:pred];
NSLog(@"%@", array);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM