通过选择带Beginswith的Keys,NSPredicate获取NSDictionary的值

时间:2014-02-13 22:06:25

标签: ios objective-c ios7 nsdictionary nspredicate

我必须管理这个丑陋的xml结构。 如何查询所有Key-Tags以/包含“Key”开头?

XML的结构:

<Data>
    <Rec>
       <Key1>0001</Key1>
       <Key2>0015</Key2>
       <Key3>0002</Key3>
       <Key4>0022</Key4>
       ...              
    </Rec>
    <Rec>
       <Key1>0015</Key1>
       <Key2>0022</Key2>
       <Key3>0002</Key3>
       <Key4>0001</Key4>
       ...              
    </Rec>
    ...
</Data>

REC-对象的结构:

@interface Rec : NSObject
@property (nonatomic, copy) NSMutableDictionary *content;
@end

这里我的代码用于在Key1上选择:

predicateRecs = [NSPredicate predicateWithFormat:@"content.%K == %@", @"Key1", @"0001"];

[result addObjectsFromArray:[recs filteredArrayUsingPredicate: predicateRecs]];

recs 是一种NSArray并包含Rec - Objects。 %K需要能够执行以下操作:content.@allKeys BEGINSWITH %@ == %@,@“Key”,@“0001”`

我希望获得所有带有价值的钥匙,例如0001 我怎么能这样做?

谢谢

1 个答案:

答案 0 :(得分:1)

我会根据您的评论使用子查询:

predicateRecs = [NSPredicate predicateWithFormat:@"SUBQUERY(FUNCTION(SELF, 'allKeys'), $k, SELF[$k] beginswith[cd] %@ AND SELF[$k] == %@).@count > 0", @"Key",@"0001"];

Dave DeLong是谓词大师: http://www.mactech.com/sites/default/files/Dave_DeLong-Power_Of_Predicates.pdf

当然: https://stackoverflow.com/a/5570510/312312