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如何过滤
字典NSDictionary和NSMutableDictionary的使用
用于循环的 dropbox V2 DBFILESmetadata 不递增