Cocoa touch 如何对NSPredicate进行排序

Cocoa touch 如何对NSPredicate进行排序,cocoa-touch,cocoa,nspredicate,Cocoa Touch,Cocoa,Nspredicate,我正在尝试在使用NSPredicate时对数组进行排序。。我在其他地方读到过,可能会选择使用NSSortDescriptor。弄清楚这件事有些困难 我正在尝试按companyName对数组排序 谢谢你的建议 格雷格 -(void)过滤器摘要:(NSMutableArray*)所有字节名展位:(NSString*)文本结果:(NSMutableArray*)结果 { [结果去除所有对象]; 如果((nil!=text)&(0

我正在尝试在使用NSPredicate时对数组进行排序。。我在其他地方读到过,可能会选择使用NSSortDescriptor。弄清楚这件事有些困难

我正在尝试按companyName对数组排序

谢谢你的建议

格雷格

-(void)过滤器摘要:(NSMutableArray*)所有字节名展位:(NSString*)文本结果:(NSMutableArray*)结果
{
[结果去除所有对象];
如果((nil!=text)&(0<[text length]){
如果((全部!=零)&(0<[全部计数]){
NSPredicate*谓词=[NSPredicate predicateWithFormat:@“companyName包含[cd]@或boothNumber开头带%@”,text,text];
[results addObjectsFromArray:[all filteredArrayUsingPredicate:predicate];
}
}
否则{
[结果添加对象列表:全部];
}
}

函数将遍历数组,将与谓词匹配的所有对象复制到一个新数组中并返回它。它不提供任何排序。这更像是一次搜索

使用NSArray的排序功能,即
sortedarrayingcomparator:
sortedarrayingdescriptor:
sortedarrayingfunction:context:
等,以最适合您的为准

查看详细信息


顺便说一句:如果你想按词汇排序,你可以使用
sortedarrayingselector:@selector(compare:)
,它将使用NSString的
compare:
函数来找到正确的顺序。

你有几个选择如何对数组排序:

这里我将展示一种基于NSSortDescriptor的方法

NSPredicate *predicate = [NSPredicate predicateWithFormat:
                                  @"companyName contains[cd] %@ OR boothNumber beginswith %@",
                                  text,
                                  text];

// commented out old starting point :)
//[results addObjectsFromArray:[all filteredArrayUsingPredicate:predicate]];

// create a descriptor
// this assumes that the results are Key-Value-accessible
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"companyName" 
                                                             ascending:YES];
//
NSArray *results = [[all filteredArrayUsingPredicate:predicate]  
                     sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]];

// the results var points to a NSArray object which contents are sorted ascending by companyName key

这应该可以完成您的工作。

谢谢您的回复,我编辑了我的主要帖子,以显示更多的代码。谓词不需要在某处使用吗?当然。懒得键入| |复制粘贴;)我可以使用NSMutableArray执行此操作吗?我有一个名为results的NSMutableArray作为参数传入。基本上是的。但您将暂时失去可变性。您必须在之后发送mutableCopy,最重要的是,通过适当地释放mutableCopy(例如,使用自动释放池),遵守内存管理规则
NSPredicate *predicate = [NSPredicate predicateWithFormat:
                                  @"companyName contains[cd] %@ OR boothNumber beginswith %@",
                                  text,
                                  text];

// commented out old starting point :)
//[results addObjectsFromArray:[all filteredArrayUsingPredicate:predicate]];

// create a descriptor
// this assumes that the results are Key-Value-accessible
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"companyName" 
                                                             ascending:YES];
//
NSArray *results = [[all filteredArrayUsingPredicate:predicate]  
                     sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]];

// the results var points to a NSArray object which contents are sorted ascending by companyName key