【问题标题】:NSMutableArray inside NSMutableDictionary how to filterNSMutableDictionary里面的NSMutableArray如何过滤
【发布时间】:2014-03-17 09:48:17
【问题描述】:

我有一个包含 key=>obj 的 NSMutableDictionary,这些对象是 NSMutableArray,每个 NSMutableArray 都有很多 Person 类的对象:

Person 类有 id,name,age

NSMutableDictionary => key(A)=>NSMutableArray (person_1,person_2)
NSMutableDictionary => key(H)=>NSMutableArray (person_3,person_5)

如何使用谓词过滤器在 NSMutableDictionary 中找到 ID 为 6 或名称为“Tony”的人员对象!!

【问题讨论】:

标签: ios objective-c nsmutablearray nsmutabledictionary predicate


【解决方案1】:

试试这个,

 NSArray *persons = [dictionary allValues];
 NSArray *allPersons = [persons valueForKeyPath:@"@unionOfArrays.self"];
 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(id == %@) OR (name CONTAINS[cd] %@)", persionId, personName];

 NSArray * resultArray = [allPersons filteredArrayUsingPredicate:predicate];

【讨论】:

  • Amazing Akhilrajtr,您提供的解决方案完全符合我的要求。但我有一个问题,我们能知道在 [dictionary allValues] 的哪个 NSMutableArray 中找到这个对象吗?
【解决方案2】:

关于你的结构的假设。

{
    "A": [
        "aaa_Persion...",//It indicate Person Object which contain id, name.
        "abc_Person...."
    ],
    "H": [
        "h_Person..........."
    ]
}

如果你的结构和上面一样,下面的代码会帮助你..

for(NSArray *array in yourIndexDictinary)
    {
      NSArray *searchedPerson =  [NSPredicate predicateWithFormat:@"(id == %@) || (name CONTAINS[cd] %@)",searchId,searchString];
    }

注意:[cd] 表示,默认情况下,字符串比较是大小写和变音符号 敏感。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多