2014-07-10 20 views
0

我有我想要排序的數據數組中的名稱和距離字段;我可以按任何一種排序,但不能一起排序。我希望數據先按名稱排序,然後再按距離排序,但當我一起使用這兩個數據時,排序總是在列表中的第一個描述符上,第二個似乎被忽略。排序字符串和浮動不工作

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

當你有兩種類型的描述符,之後的第二僅被用作'決勝者'。如果你按名稱排序,那麼距離,「亞當」總是會在「布賴恩」之前出現。但距離爲100的「亞當」會在距離爲200的「亞當」之前出現。那不是你所看到的行爲嗎?還是你想做一些不同的事情? – alivingston

+0

嗯,我的名字都不一樣,所以我不知道;它可能是一個打破平局的工作。 – dfdumaresq

+0

我更喜歡在「A&W#0339」,「23公里」之前出現的「A&W#0338」,「25公里」。我想這是有道理的,因爲我的主要排序是在NAME上。 – dfdumaresq

回答

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公里」 會 「A & W#0339」

+0

感謝您的有用答案! – dfdumaresq