通过匹配发生对NSStrings的NSArray进行排序

时间:2011-02-15 09:20:58

标签: cocoa search sorting nsstring nsarray

如何通过搜索模式匹配对NSArray进行排序? 因此,例如,如果我有一个等于'xd'的搜索模式和一个值数组:

axd
bxd
xdd
gtxd
xdc

如何获得如下输出:

xdc 
xdd 
axd 
bxd 
gtxd

提前谢谢。

2 个答案:

答案 0 :(得分:3)

使用NSArray的{​​{1}},其功能首先按搜索字词的位置排序,然后按字符串的自然顺序排序。

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"];

答案 1 :(得分:1)

您可以使用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];