字符串排序,浮点不起作用

时间:2014-07-10 13:06:37

标签: ios nsarray nssortdescriptor

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

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

1 个答案:

答案 0 :(得分: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];
    }];

如果您使用此nameSort和您的distanceSort," A& W#0338"," 25 km"将在" A& W#0339"

之后出现