我有一个NSArray
,我想用原始数组中满足特定条件的对象创建一个新的NSArray
.标准由一个返回BOOL
的函数决定.
我可以创建一个NSMutableArray
,遍历源数组,复制过滤函数接受的对象,然后创建一个不可变的版本.
有更好的办法吗?
我有一个NSArray
,我想用原始数组中满足特定条件的对象创建一个新的NSArray
.标准由一个返回BOOL
的函数决定.
我可以创建一个NSMutableArray
,遍历源数组,复制过滤函数接受的对象,然后创建一个不可变的版本.
有更好的办法吗?
NSArray
和NSMutableArray
提供了过滤数组内容的方法.NSArray
提供filteredArrayUsingPredicate:,返回一个新数组,该数组包含接收器中与指定谓词匹配的对象.NSMutableArray
添加filterUsingPredicate:,根据指定的谓词判断接收方的内容,只留下匹配的对象.下面的例子说明了这些方法.
NSMutableArray *array =
[NSMutableArray arrayWithObjects:@"Bill", @"Ben", @"Chris", @"Melissa", nil];
NSPredicate *bPredicate =
[NSPredicate predicateWithFormat:@"SELF beginswith[c] 'b'"];
NSArray *beginWithB =
[array filteredArrayUsingPredicate:bPredicate];
// beginWithB contains { @"Bill", @"Ben" }.
NSPredicate *sPredicate =
[NSPredicate predicateWithFormat:@"SELF contains[c] 's'"];
[array filteredArrayUsingPredicate:sPredicate];
// array now contains { @"Chris", @"Melissa" }