使用NSPredicate过滤数组并获取查询中某些元素组成的新对象

时间:2012-03-28 05:57:18

标签: iphone objective-c macos subquery nspredicate

我有一个像这样的数组

Word array (
    {
    translation =         (
                    {
            name = Roma;
            lang = it;
        },
                    {
            name = Rome;
            lang = en;
        }
    );
    type = provenance;
    value = RMU;
},
    {
    translation =         (
                    {
            name = "Milano";
            lang = it;
        },
                    {
            name = "Milan";
            lang = en;
        }
    );
    type = destination;
    value = MIL;
},)

我的想法是使用NSPredicate过滤它并接收基于lang键的字典数组,我想通过过滤lang == it,

得到类似的东西。
Word array (
        {
            name = Roma;
            lang = it;
            type = provenance;
            value = RMU;
        },
        {
            name = "Milano";
            lang = it;
            type = destination;
            value = MIL;
        })

我无法简化数据,因为它来自“JSON”服务。 我尝试过使用SUBQUERY的不同谓词,但没有一个有效,关于SUBQUERY的文档非常差,我遗漏了一些东西,可能问题是我想收到一个与源非常不同的对象。
当然我能够获得那个列举的结构,我想知道是否有更短的解决方案 Dave DeLong link to SUBQUERY explanation的回答给了我很多关于SUBQUERY的提示,但是我无法找到解决问题的方法。
有人可以给我一些提示吗?

1 个答案:

答案 0 :(得分:1)

你不能用谓词来做这件事。 (好吧,你可能,但它会很愚蠢,很难理解和维护,最后你自己编写代码会更容易)

NSPredicate用于从现有集合中提取数据子集。它只会*进行过滤,因为谓词只是一个计算结果为true或false的语句。如果你有一个集合并且过滤它带有谓词,那么会发生什么是集合开始迭代它的元素并询问谓词:“这会通过你的测试吗?” “这通过了你的考试吗?” “这会通过你的测试吗?”......每当谓词回答“是的,这通过我的测试”时,该集合将该对象添加到新集合中。这是从过滤方法返回的新集合。

<强>将

NSPredicate不(轻松)允许合并两组数据(这就是你要求的)。这是可能的(因为你可以使用FUNCTION()表达式做任何事情),但这会导致本身不可读的谓词。

<强> SO

请勿使用NSPredicate合并数据集。自己动手。