Objective-C快速枚举:检查BOOL

时间:2014-07-27 17:31:04

标签: objective-c xcode fast-enumeration

场景 =我需要遍历一个数组并查找有多少“未读”并计算向用户显示的数量。

我在寻找什么 = 喜欢这个(这不是我真正的代码)

for (NSDictionary *dic in self.objects) {

    [unreadCountArray addObject:dic[@"wasRead"]];

    for (YES in unreadCountArray) {

        //statements

    }
}

问题 =有没有人知道如何循环查找所有YES布尔值?

2 个答案:

答案 0 :(得分:2)

如果您有一个字典数组,并且想要过滤它们,那么filteredArrayUsingPredicate:是要使用的方法。

您可以使用字典中的键(predicateWithFormat:)创建谓词。

然后,这将为您提供一系列与谓词中的条件匹配的词典。

没有示例代码,我在电话上回答这个问题。

答案 1 :(得分:2)

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"wasRead = YES"];
NSArray *arr = [array filteredArrayUsingPredicate:predicate];

可以在0.0004秒内对一千个对象进行排序。

然后就这样做:

for (NSDictionary *object in arr) {
    //Statements
}

编辑实际上经过进一步的实验后,使用快速枚举的速度大约是0.0001的四倍,如果缩放到100000个对象可以更快,更快。

NSMutableArray *test = [NSMutableArray array];

for (NSDictionary *dict in array)
    if ([dict[@"theKey"] boolValue])
        [test addObject:dict];

因此,对于排序,快速枚举实际上更快,但对于几百个对象,性能提升可以忽略不计。

请在提出这样的问题并获得好评之前,通过查看文档可以完全避免这些问题。与this articlethis article.

一样