对字符串排序并浮动不起作用
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”之后
【讨论】:
感谢您的帮助!以上是关于对字符串排序并浮动不起作用的主要内容,如果未能解决你的问题,请参考以下文章