使用谓词过滤字典数组

时间:2014-05-04 15:09:46

标签: ios objective-c data-structures nsarray nspredicate

我有以下字典数组:

Printing description of newOrderbookBids:
<__NSArrayI 0x10053e7c0>(
{
    price = "10.14";
    size = 148;
},
{
    price = "10.134";
    size = 0;
},
{
    price = "10.131";
    size = 321;
})

数组中的每个字典都有pricesize个键,两个都是数字。

我想返回一个过滤的数组,其中只包含size > 0的字典。在这个例子中,这将是带有字典#1和#3的数组,但没有字典#2:

   ({
        price = "10.14";
        size = 148;
    },
    {
        price = "10.131";
        size = 321;
    })

我已尝试使用以下代码段按尺寸过滤NSArray *newOrderbookBids

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"size > 0"];
newOrderbookBids = [newOrderbookBids filteredArrayUsingPredicate:predicate];

不幸的是,我的代码因运行时错误而崩溃

[NSSymbolicExpression compare:]: unrecognized selector sent to instance xxxx

我的代码和谓词出了什么问题? 如何按size > 0过滤?

谢谢!

2 个答案:

答案 0 :(得分:1)

&#34; SIZE&#34;是"Predicate Format String Syntax"中的保留关键字 并且关键字不区分大小写。

要解决该问题,请使用&#34;%K&#34; format参数作为一个var arg替换 密钥路径

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K > 0", @"size"];

答案 1 :(得分:1)

保留字

保留以下字样:

AND,OR,IN,NOT,ALL,ANY,SOME,NONE,LIKE,CASEINSENSITIVE,CI,MATCHES,CONTAINS,BEGINSWITH,ENDSWITH,BETWEEN,NULL,NIL,SELF,TRUE,YES,FALSE,NO,FIRST ,LAST,SIZE,ANYKEY,SUBQUERY,CAST,TRUEPREDICATE,FALSEPREDICATE

发生这种情况时会发出更清晰的错误消息。