首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不是按字母顺序排序数组,而是使用字符串前缀参数进行排序。

不是按字母顺序排序数组,而是使用字符串前缀参数进行排序。
EN

Stack Overflow用户
提问于 2014-04-18 08:18:42
回答 2查看 193关注 0票数 0

初始阵列

代码语言:javascript
复制
{
    "Golf > Short game > Ballflight / Target",
    "Mental > I do (behavior/skills - how) > Energy / Emotions",
    "Fitness > Endurance",
    "Fitness > Flexibility",
    "Golf > Long game",
    "Golf > Long game > Approach from fairway",
    "Golf > Practice Game",
}

我想将上面的数组排序为从golffitnessmental开始。

因此,生成的数组如下所示

代码语言:javascript
复制
{
    "Golf > Short game > Ballflight / Target",
    "Golf > Long game",
    "Golf > Long game > Approach from fairway",
    "Golf > Practice Game",
    "Fitness > Endurance",
    "Fitness > Flexibility",
    "Mental > I do (behavior/skills - how) > Energy / Emotions",
}

请引导我。

我尝试使用for循环,但我需要一些简单的解决方案来解析它。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-18 08:34:12

您可以使用- (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr

下面是一个例子。

代码语言:javascript
复制
NSArray *array = @[@"G", @"M", @"F"] ;
array = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    NSString *s1 = obj1 ;
    NSString *s2 = obj2 ;
    unichar u1 = [s1 characterAtIndex:0] ;
    unichar u2 = [s2 characterAtIndex:0] ;
    if (u1 == u2) {
        return [s1 compare:s2] ;
    } else {
        if (u1 == 'G') {
            return NSOrderedAscending ;
        } else if (u1 == 'M') {
            return NSOrderedDescending ;
        } else {
            return u2 == 'G' ? NSOrderedDescending : NSOrderedAscending ;
        }
    }
}] ;
NSLog(@"%@", array) ;
票数 0
EN

Stack Overflow用户

发布于 2014-04-18 08:40:07

示例代码(根据行的第一个单词进行排序):

代码语言:javascript
复制
NSMutableArray *myArray = [@[
    @"Golf > Short game > Ballflight / Target",
    @"Mental > I do (behavior/skills - how) > Energy / Emotions",
    @"Fitness > Endurance",
    @"Fitness > Flexibility",
    @"Golf > Long game",
    @"Golf > Long game > Approach from fairway",
    @"Golf > Practice Game",
    ] mutableCopy];

NSDictionary *scores = @{@"Golf":@1, @"Fitness":@2, @"Mental":@3};

[myArray sortUsingComparator:^NSComparisonResult(NSString *str1, NSString *str2) {

    // first word (can be refined checking for better word break chars)
    NSString *prefix1;
    NSRange rangeUntilSpace1 = [str1 rangeOfString:@" "];
    if (rangeUntilSpace1.location != NSNotFound)
        prefix1 = [str1 substringToIndex:rangeUntilSpace1.location];
    else
        prefix1 = str1;

    NSString *prefix2;
    NSRange rangeUntilSpace2 = [str2 rangeOfString:@" "];
    if (rangeUntilSpace2.location != NSNotFound)
        prefix2 = [str2 substringToIndex:rangeUntilSpace2.location];
    else
        prefix2 = str2;

    // scores (taken from the previous dictionary)
    NSInteger score1 = [scores[prefix1] intValue];
    NSInteger score2 = [scores[prefix2] intValue];

    if (score1 && score2) {

        return score1 > score2 ? NSOrderedDescending : NSOrderedAscending;
    } else if (score1) {

        return NSOrderedAscending;  // if not in scores dictionary, put down
    } else {

        return NSOrderedDescending; // if not in scores dictionary, put down
    }

}];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23150191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档