首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NSPredicate过滤数组

使用NSPredicate过滤数组
EN

Stack Overflow用户
提问于 2014-06-06 00:53:05
回答 1查看 606关注 0票数 1

我有一个叫做“SMessage”的类;

代码语言:javascript
复制
@interface SMessage:NSObject
@property(nonatomic)int messageId;
@end

我还可以创建一个名为SDay的类;SDay可以有很多消息(SMessage);

代码语言:javascript
复制
@interface SDay:NSObject
@property(nonatomic, strong)NSMutableArray *messages;
@end

在期末考试中,我有一个普通的类,其中我有几天数组;

代码语言:javascript
复制
@interface SCommonClass:NSObject 
@property(nonatomic, strong)NSMutableArray *days;
@end

我尝试过滤天数组,并找到messageId =100的邮件(例如);

我不知道如何使用NSPredicate来做到这一点;谢谢你的回答;

EN

回答 1

Stack Overflow用户

发布于 2014-06-06 02:24:06

代码语言:javascript
复制
NSPredicate *p = [NSPredicate predicateWithBlock:^BOOL(id object, NSDictionary *bindings) {

    SDay* day = (SDay*)object;
    NSMutableArray* messages = day.messages;
    NSPredicate* predicate = [NSPredicate predicateWithFormat:@"messageId == 100"];

    if ([messages filteredArrayUsingPredicate:predicate].count == 0) {
        return NO;
    }
    else{
        return YES;
    }

}];


NSArray* result = [common.days filteredArrayUsingPredicate:p];

============update===============

代码语言:javascript
复制
NSPredicate *p = [NSPredicate predicateWithBlock:^BOOL(id object, NSDictionary *bindings) {

    SDay* day = (SDay*)object;
    NSMutableArray* messages = day.messages;
    NSPredicate* predicate = [NSPredicate predicateWithFormat:@"messageID == 100"];
    NSArray *filteredMessages = [messages filteredArrayUsingPredicate:predicate];
    if (filteredMessages.count == 0) {
        return NO;
    }
    else{
        day.messages = [NSMutableArray arrayWithArray:filteredMessages];
        return YES;
    }

}];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24065897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档