基于 Key 和 Predicates 对 NSMutableArray 进行排序不起作用?
Posted
技术标签:
【中文标题】基于 Key 和 Predicates 对 NSMutableArray 进行排序不起作用?【英文标题】:Sorting NSMutableArray based on Key with Predicates not working? 【发布时间】:2016-02-12 14:12:28 【问题描述】:我有一个包含 150 多个对象的 NSMutableArray,我需要根据与输入名称匹配的这个键“名称”创建一个新数组。
所以我从 *** 得到了这个谓词代码
NSMutableArray *listForm=[[NSMutableArray alloc]init]; //copy Original Array
listForm=[arr valueForKey:@"data"]; //copied
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == [c] %@", [selectedDrug valueForKey:@"name"]]; //checking name
NSLog(@"%@",[selectedDrug valueForKey:@"name"]); //my input name for matching
[listForm filteredArrayUsingPredicate:predicate];
NSLog(@"%@",listForm);//final result
现在得到了正确的结果,但随之而来的是额外的对象
例如喜欢 考虑一下这是我的大对象列表
[
name:"john",
location:"washington",
age:23
,
name:"Zirad kan",
location:"iceland",
age:23
,
name:"john",
location:"usa",
age:43
,
name:"riya",
location:"india",
age:20
,
name:"Rachel",
location:"netherland",
age:33
,
name:"john Mark",
location:"washington",
age:23
,
name:"john Doe",
location:"washington",
age:23
]
从这里我需要所有名称与“john”完全匹配
所以结果会是这样的
[
name:"john",
location:"washington",
age:23
,
name:"john",
location:"usa",
age:43
]
但是当我使用上面的代码时,我得到了这个作为最终结果
[
name:"john",
location:"washington",
age:23
,
name:"john",
location:"usa",
age:43
,
name:"john Mark",
location:"washington",
age:23
,
name:"john Doe",
location:"washington",
age:23
]
我怎样才能删除“John Doe”和“John Mark”,就像我只需要一个匹配“john”的特定文本一样。
请帮帮我
【问题讨论】:
看到这个链接可能对你有帮助***.com/questions/11597508/…predicateWithBlock:
?
【参考方案1】:
[NSArray filteredArrayUsingPredicate:]
返回过滤后的数组,所以:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == [c] %@",
selectedDrug[@"name"]];
NSArray *filtered = [arr[@"data"] filteredArrayUsingPredicate:predicate];
注意:这里假设 arr
和 selectedDrug
都是 NSDictionary
实例。
【讨论】:
让我自己试试这个以上是关于基于 Key 和 Predicates 对 NSMutableArray 进行排序不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
lightdb22.4-新增优化器提示cardinality 和ordered_predicates
lightdb22.4-新增优化器提示cardinality 和ordered_predicates