我有一个 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" }
关于objective-c - 在 Objective-C 中将 NSArray 过滤成一个新的 NSArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/110332/