全,
我尝试使用谓词返回搜索结果,优先考虑以搜索字符串VS开头的字符串。简单地包含在它里面。
例如,如果搜索字符串是"Objective-C",我想像这样得到过滤后的结果:
Objective-C a入门
Objective-C模式
Objective-C编程
所有关于Objective-C的东西
如何在Objective-C中编程
这是我尝试过的,但由于它是一个OR,它显然不会优先于第一个条件。有没有办法对谓词进行某种类型的“链接”?谢谢
NSPredicate *filter = [NSPredicate predicateWithFormat:@"subject BEGINSWITH [cd] %@ OR subject CONTAINS [cd]", searchText,searchText];
NSArray *filtered = [myArray filteredArrayUsingPredicate: filter];发布于 2012-04-07 01:13:39
我不认为有一种方法可以单独使用NSPredicate。您所要求的似乎是经过排序的结果。通过在从谓词中获取结果之后对结果进行排序来实现这一点。在这种情况下,因为排序顺序不是简单的字母顺序,所以应该使用NSArray的-sortedArrayUsingComparator:方法。类似这样的东西(没有经过测试,只是在我脑海中打字)。
NSArray *sortedStrings = [filtered sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
NSString *string1 = (NSString *)obj1;
NSString *string2 = (NSString *)obj2;
NSUInteger searchStringLocation1 = [string1 rangeOfString:searchString].location;
NSUInteger searchStringLocation2 = [string2 rangeOfString:searchString].location;
if (searchStringLocation1 < searchStringLocation2) return NSOrderedDescending;
if (searchStringLocation1 > searchStringLocation2) return NSOrderedAscending;
return NSOrderedSame;
}];发布于 2012-04-07 01:14:49
看起来您正在尝试使用谓词对数组进行排序,或者尝试仅使用谓词进行过滤和排序。谓词返回布尔值:字符串要么以搜索文本开头,要么包含搜索文本,或者不包含。谓词不会告诉你任何关于相对顺序的信息。筛选数组会删除您为其提供的谓词返回NO的那些对象,因此只有以搜索文本开头或包含搜索文本的对象才会出现在筛选出的数组中。实际上,由于任何以搜索文本开头的字符串也包含它,您可以将谓词简化为只包含“包含”部分。
如果要更改筛选结果的顺序,请使用适当的比较器对筛选数组进行排序。
https://stackoverflow.com/questions/10046643
复制相似问题