使用NSPredicate过滤NSDictionaries的NSDictionary

时间:2013-06-30 13:18:17

标签: ios objective-c nsdictionary nspredicate

我想总结所有可以从我的服务器下载但尚未存在于我的应用程序中的图像。我有以下包含其他词典的词典:

    "iPhone_small_991.jpg" =     {
        PictureExists = 1;
        PictureSize = 2406;
    };
    "iPhone_small_992.jpg" =     {
        PictureExists = 0;
        PictureSize = 2384;
    };
    "iPhone_small_993@2x.jpg" =     {
        PictureExists = 1;
        PictureSize = 2642;
    };

如果我想得到一个与某个关键模式匹配的所有对象的数组(ENDSWITH @ 2x.jpg和PictureExists = 0),NSPredicate必须如何?

最佳解决方案是直接计算总和:)

2 个答案:

答案 0 :(得分:3)

两个步骤:

  1. 使用NSDictionary过滤NSPredicate,获取与所需模式匹配的键数组

    NSArray *matchingKeys = [[d allKeys] filteredArrayUsingPredicate:[NSPredicate  predicateWithFormat:@"name ENDSWITH[cd] @@2x"]];
    
  2. 使用KVC collection operators

    总结PictureSize个值
    [[d objectsForKeys:matchingKeys notFoundMarker:NSNull.null] valueForKey:@"@sum.PictureSize"];
    

答案 1 :(得分:0)

您可以从字典中获取allKeys,然后使用ENDSWITH @2x.jpg谓词过滤该数组。然后,您可以使用objectsForKeys:notFoundMarker:来获取匹配的词典。然后使用PictureExists = 0谓词过滤该数组。然后使用KVC获取@sum.PictureSize