对字符串排序并浮动不起作用

Posted

技术标签:

【中文标题】对字符串排序并浮动不起作用【英文标题】:Sort on string and float not working 【发布时间】:2014-07-10 13:06:36 【问题描述】:

我想要排序的数据数组中有名称和距离字段;我可以按其中一个排序,但不能同时排序。我希望数据首先按名称排序,然后是距离,但是当我将两者一起使用时,排序总是在列表中的第一个描述符上,第二个似乎被忽略了。

    NSSortDescriptor *nameSort = [[NSSortDescriptor alloc] 
                                    initWithKey:@"NAME"
                                    ascending:YES
                                    selector:@selector(localizedStandardCompare:)];

    NSSortDescriptor *distanceSort = [[NSSortDescriptor alloc]        
                                        initWithKey:@"DISTANCE" 
                                        ascending:YES];

    sortedArray = [featureSet.features sortedArrayUsingDescriptors:@[nameSort, distanceSort]];

    [super.tableView reloadData];

【问题讨论】:

当您有两个排序描述符时,第二个仅用作“决胜局”。如果您按名称排序,那么距离,“Adam”将始终排在“Brian”之前。但是距离为 100 的“亚当”会出现在距离为 200 的“亚当”之前。这不是您看到的行为吗?还是您想尝试一些不同的事情? 好吧,我的名字都不相同,所以我不能说;它可能会起到平局的作用。 我所拥有的更像是“A&W #0338”、“25 km”在“A&W #0339”、“23 km”之前。我想这是有道理的,因为我的主要排序是在 NAME 上。 【参考方案1】:

您看到的行为绝对是有道理的 - “A&W #0338”在“A&W #0339”之前,因此距离排序没有更多需要确定的内容。

如果您的所有数据都以这种方式构建 - 名称后跟 #000 - 您可以去掉数字进行排序,然后距离排序就可以完成它的工作。您可以在模型层通过将标题拆分为两个属性(名称和位置编号)来执行此操作,也可以在排序描述符中执行此操作。

    NSSortDescriptor *nameSort = [NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES comparator:^NSComparisonResult(NSString *str1, NSString *str2) 
        NSString *title1 = [[str1 componentsSeparatedByString:@" #"] firstObject];
        NSString *title2 = [[str2 componentsSeparatedByString:@" #"] firstObject];
        return [title1 compare:title2];
    ];

如果您使用此名称Sort 并且您的距离排序,“A&W #0338”、“25 km”将出现在“A&W #0339”之后

【讨论】:

感谢您的帮助!

以上是关于对字符串排序并浮动不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Vector算法中的字符串排序不起作用

使用逗号分隔符的表格排序不起作用

在 Mongodb/pymongo 中按字符串长度排序

在对数组进行排序并传递它之后,React 钩子 useState/setState 不起作用

冒泡排序不起作用

如何在C中按升序对字符串数组进行排序