代码之家  ›  专栏  ›  技术社区  ›  Tom Testicool

Objective-C快速枚举:检查BOOL

  •  -8
  • Tom Testicool  · 技术社区  · 11 年前

    脚本 =我需要遍历一个数组,找到有多少“未读”,并计算要显示给用户的数量。

    我在寻找什么 =某物 喜欢 这(这不是我的真实代码)

    for (NSDictionary *dic in self.objects) {
    
        [unreadCountArray addObject:dic[@"wasRead"]];
    
        for (YES in unreadCountArray) {
    
            //statements
    
        }
    }
    

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

    2 回复  |  直到 11 年前
        1
  •  2
  •   Milo    11 年前
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"wasRead = YES"];
    NSArray *arr = [array filteredArrayUsingPredicate:predicate];
    

    可以对1000个对象进行排序 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 article this article.

        2
  •  2
  •   jrturton    11 年前

    如果您有一系列字典,并且希望对它们进行筛选,那么 filteredArrayUsingPredicate: 是要使用的方法。

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

    然后,这将为您提供与谓词中的条件匹配的字典数组。

    没有样本代码,我在电话里回答。