NSMutableDictionary里面的NSMutableArray如何过滤

Posted

技术标签:

【中文标题】NSMutableDictionary里面的NSMutableArray如何过滤【英文标题】:NSMutableArray inside NSMutableDictionary how to filter 【发布时间】: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”的人员对象!!

【问题讨论】:

你有尝试过什么吗?也许是谷歌搜索? 很难形成一个逻辑,抱歉我做不到。 这是一个您可能会发现有用的链接:developer.apple.com/library/mac/documentation/Cocoa/Conceptual/… 【参考方案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] 表示,默认情况下,字符串比较是大小写和变音符号 敏感。

【讨论】:

以上是关于NSMutableDictionary里面的NSMutableArray如何过滤的主要内容,如果未能解决你的问题,请参考以下文章

NSMutableDictionary里面的NSMutableArray如何过滤

自定义 iPhone 振动的强度

字典NSDictionary和NSMutableDictionary的使用

用于循环的 dropbox V2 DBFILESmetadata 不递增

如何使用 NSMutableDictionary 导出 .JSON 文件?

尝试在 NSMuableDictionary 中设置值时应用程序崩溃