Ios 按字符串排序,浮动不起作用

Ios 按字符串排序,浮动不起作用,ios,nsarray,nssortdescriptor,Ios,Nsarray,Nssortdescriptor,在我想要排序的数据数组中有name和distance字段;我可以按其中一个排序,但不能同时按两个排序。我希望数据先按名称排序,然后按距离排序,但当我同时使用两者时,排序总是在列表中的第一个描述符上,第二个描述符似乎被忽略 NSSortDescriptor *nameSort = [[NSSortDescriptor alloc] initWithKey:@"NAME"

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

    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];

你所看到的行为肯定是有道理的——“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];
    }];

如果您使用此名称排序和距离排序,“A&W#0338”,“25 km”将位于“A&W#0339”之后

当您有两个排序描述符时,第二个仅用作“平分符”。如果你按名字排序,那么距离,“亚当”总是排在“布赖恩”之前。但距离为100的“亚当”将排在距离为200的“亚当”之前。这不是你看到的行为吗?或者你想做些不同的事?我的名字都不一样,所以我说不出来;它可能起到了打破僵局的作用。我所看到的更像是“a&W#0338”,“25公里”出现在“a&W#0339”,“23公里”之前。我想这是有道理的,因为我的主要分类是名字。谢谢你的回答!