Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 按匹配出现次数对NSStrings的NSArray排序_Cocoa_Search_Sorting_Nsstring_Nsarray - Fatal编程技术网

Cocoa 按匹配出现次数对NSStrings的NSArray排序

Cocoa 按匹配出现次数对NSStrings的NSArray排序,cocoa,search,sorting,nsstring,nsarray,Cocoa,Search,Sorting,Nsstring,Nsarray,如何通过搜索模式匹配对NSArray进行排序? 例如,如果我有一个等于“xd”的搜索模式和一个值数组: axd bxd xdd gtxd xdc 如何获得如下输出: xdc xdd axd bxd gtxd 提前感谢。您可以使用NSArray的sortedArrayUsingFunction:context:method: 您可以使用NSArray的sortedArrayUsingFunction:context:method: 使用NSArray的sortedarrayusing函

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

axd
bxd
xdd
gtxd
xdc
如何获得如下输出:

xdc 
xdd 
axd 
bxd 
gtxd
提前感谢。

您可以使用NSArray的sortedArrayUsingFunction:context:method:

您可以使用NSArray的sortedArrayUsingFunction:context:method:

使用NSArray的sortedarrayusing函数:该函数首先按搜索词的位置排序,然后按字符串的自然顺序排序

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"];
使用NSArray的sortedarrayusing函数:该函数首先按搜索词的位置排序,然后按字符串的自然顺序排序

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
)