代码之家  ›  专栏  ›  技术社区  ›  blub

N通过选择带有Beginswith的键来重新定位并获取NSDictionary的值

  •  2
  • blub  · 技术社区  · 10 年前

    我必须管理这个丑陋的xml结构。 如何查询所有以“Key”开头/包含“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]];
    

    记录 是NSArray的一种类型,包含Rec-Objects。 %K需要能够做到以下几点: content.@allKeys BEGINSWITH %@ == %@ ,@“Key”,@“0001”`

    我想获取值为0001的所有密钥 我该怎么做?

    谢谢

    1 回复  |  直到 10 年前
        1
  •  1
  •   Community Egal    7 年前

    我会根据您的评论使用Subquery,然后:

    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