【发布时间】:2011-02-15 09:20:57
【问题描述】:
如何通过搜索模式匹配对 NSArray 进行排序? 因此,例如,如果我有一个等于“xd”的搜索模式和一个值数组:
axd
bxd
xdd
gtxd
xdc
我怎样才能得到如下输出:
xdc
xdd
axd
bxd
gtxd
提前谢谢你。
【问题讨论】:
标签: cocoa search sorting nsstring nsarray
如何通过搜索模式匹配对 NSArray 进行排序? 因此,例如,如果我有一个等于“xd”的搜索模式和一个值数组:
axd
bxd
xdd
gtxd
xdc
我怎样才能得到如下输出:
xdc
xdd
axd
bxd
gtxd
提前谢谢你。
【问题讨论】:
标签: cocoa search sorting nsstring nsarray
将NSArray 的sortedArrayUsingFunction: 与一个函数一起使用,该函数首先按搜索词的位置排序,然后按字符串的自然排序。
NSInteger sorter(id arg1, id arg2, void *context)
{
NSString *searchTerm = (NSString *)context;
NSRange range1 = [arg1 rangeOfString:searchTerm];
NSRange range2 = [arg2 rangeOfString:searchTerm];
if (range1.location < range2.location)
return NSOrderedAscending;
if (range1.location > range2.location)
return NSOrderedDescending;
return [arg1 compare:arg2];
}
NSArray *array = [NSArray arrayWithObjects:@"axd", @"bxd", @"xdd", @"gtxd", @"xdc", nil];
NSArray *sortedArray = [array sortedArrayUsingFunction:sorter context:@"xd"];
打印出来:
2011-02-15 01:33:49.642 GreatApp[78849:a0f] (
xdc,
xdd,
axd,
bxd,
gtxd
)
【讨论】:
你可以使用 NSArray 的sortedArrayUsingFunction:context: 方法:
NSInteger occurenceSort(NSString* s1, NSString* s2, void *context)
{
NSRange range1 = [s1 rangeOfString:(NSString*)context];
NSRange range2 = [s2 rangeOfString:(NSString*)context];
if (range1.location < range2.location)
return NSOrderedAscending;
else if (range1.location > range2.location)
return NSOrderedDescending;
return NSOrderedSame;
}
...
NSString *stringToSearch = @"xd";
NSArray *sorterArray = [yourArray sortedArrayUsingFunction:occurenceSort context:stringToSearch];
【讨论】: