我有一个NSArray,我想用原始数组中满足特定条件的对象创建一个新的NSArray.标准由一个返回BOOL的函数决定.

我可以创建一个NSMutableArray,遍历源数组,复制过滤函数接受的对象,然后创建一个不可变的版本.

有更好的办法吗?

推荐答案

NSArrayNSMutableArray提供了过滤数组内容的方法.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相关问答推荐

如何向 UILabel 添加滚动功能

NSLocale 和国家名称

带有语法高亮的 UITextView

NSPredicate 与整数比较

是否可以在 nsstring 中包含引号?

找不到名为ProjectName的目标

Objective-C 的 Eclipse 插件?

UICollectionView 标头未显示

如何为图层 shadowOpacity 设置动画?

UICollectionView 单元格 Select 和单元格重用

主队列上的 dispatch_sync 与 dispatch_async

Xcode 在您的 keys 串中找不到此配置文件的有效私有证书/有效密钥对

遍历 NSString 中所有字符的最有效方法

为什么 LLDB 不能打印 view.bounds?

笔尖中的原型单元而不是故事板

如何在 Xcode 7 中启用_BITCODE?

将浮点数四舍五入到objective C中的下一个整数?

CMTime 秒输出

如何定义 UIColor 的常量值?

Facebook SDK 登录永远不会在 iOS 9 上回调我的应用程序