首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对数字和字符串数组进行排序

对数字和字符串数组进行排序
EN

Stack Overflow用户
提问于 2016-11-02 18:13:35
回答 2查看 350关注 0票数 1

我有一系列的数字和字符串。喜欢

代码语言:javascript
运行
复制
NSArray* list = @[@"9", @"21", @"A 2-5", @"19-1", @"10", @"D 7-10", @"13-2"];

我要将这个数组排序为

代码语言:javascript
运行
复制
@[@"9", @"10", @"21", @"13-2", @"19-1", @"A 2-5", @"D 7-10"];

但如果我用

代码语言:javascript
运行
复制
[list sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
    return [obj1 compare:obj2];
}];

我得到了

代码语言:javascript
运行
复制
@[@"10", @"13-2", @"19-1", @"21", @"9", @"A 2-5", @"D 7-10"];

如果我用

代码语言:javascript
运行
复制
[list sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

我怎样才能达到我预期的结果呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-02 18:37:06

你和sortedArrayUsingComparator走在正确的轨道上。下面是实现它的方法:

代码语言:javascript
运行
复制
NSArray* list = @[@"9", @"21", @"A 2-5", @"19-1", @"10", @"D 7-10", @"13-2"];
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
NSArray *sortedList = [list sortedArrayUsingComparator:^NSComparisonResult(NSString *string1, NSString *string2) {
        NSNumber *number1 = [numberFormatter numberFromString:string1];
        NSNumber *number2 = [numberFormatter numberFromString:string2];

        if (number1 && number2)
            return [number1 compare:number2];
        else if (number1)
            return NSOrderedAscending;
        else if (number2)
            return NSOrderedDescending;
        else return [string1 compare:string2];
}];
NSLog(@"sortedList: %@", sortedList);

输出:

( 9、10、21、"13-2“、"19-1”、“A2-5”、"D 7-10“)

不能使用integerValue而不能使用NSNumberFormatter的原因是,例如,它会将13-2解析为13,并将其放在21之前,这不是您所期望的。NSNumberFormatter更灵活一些,如果字符串不是确切的数字,它将返回零。

票数 1
EN

Stack Overflow用户

发布于 2016-11-02 18:19:52

您面临的问题是,您没有“一个数字和字符串数组”,而是有一个Strings数组。它们是根据字符顺序进行比较的:比较第一个字符,如果第一个字符相同,比较第二个字符,等等。

如果您想要指定的顺序,则需要实现自定义比较器/排序方法(this answer很好地展示了各种可能性)。

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

https://stackoverflow.com/questions/40386964

复制
相关文章

相似问题

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