NSArray,如何根据属性的值获取项目[重复]

Posted

技术标签:

【中文标题】NSArray,如何根据属性的值获取项目[重复]【英文标题】:NSArray, how get items based on a property's value [duplicate] 【发布时间】:2013-07-04 04:23:01 【问题描述】:

我有一个包含人员列表的 NSMutableArray,现在我需要获取所有性别 = 男性的人的列表,我该怎么做?我应该进入 NSPredicates 来做到这一点吗?

【问题讨论】:

【参考方案1】:

将此NSArray 类别复制到代码中的某个位置

@implementation NSArray (My)

-(NSArray*)arrayWithPredicate:(BOOL(^)(id obj))predicate 
    NSMutableArray* objs = [NSMutableArray array];

    [self enumerateObjectsUsingBlock:^(id o, NSUInteger idx, BOOL *stop) 
        if (predicate(o)) 
            [objs addObject:o];
        
    ];

    return objs;


@end

那么你需要在哪里得到男性:

NSArray* males = [people arrayWithPredicate:^BOOL(id obj) 
    // Gender check 
];

相对于NSPredicate 的优势在于您不必使用文字字符串来指定条件(如果条件很复杂,那就很混乱了)。

【讨论】:

【参考方案2】:

是的,你可以这样使用,

NSArray *filtered = [data filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self.gender == %@", @"male"]];
NSLog(@"%@",filtered);

【讨论】:

以上是关于NSArray,如何根据属性的值获取项目[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从 NSArray 获取单个属性的 NSArray

如何根据项目内容从 NSArray 中删除项目

通过取消引用更改 NSArray 中的值?

按 2 级深的键值关系对 NSArray 进行排序

无法将“__NSDictionaryM”类型的值转换为“NSArray”[重复]

获取恰好出现 n 次的值