objective-c - 在 Objective-C 中将 NSArray 过滤成一个新的 NSArray

标签 objective-c cocoa nsarray

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

相关文章:

objective-c - iOS 6 - 在没有 Default-568h@2x.png 的情况下处理 iPhone 5 屏幕尺寸

iphone - 如何在同一标签上使用不同颜色

iphone - 如何使用 MailCore 定期获取新邮件

objective-c - 将 NSNumber 转换为 int

ios - Objective-C:有选择地组合两个数组

objective-c - 如何在 NSArray 中找到某种对象?

iphone - 在 iOS(某些版本)中切换声音音量时不一致的 OpenAL 爆音伪像

iOS - Objective-C 无法使具有标识符的单元格出队

objective-c - 类别对键@sum的键值编码不兼容

objective-c - [NSArray arrayWithArray :] and [NSArray copy] 之间的区别