2017-07-12 110 views
1

進口

int main(int argc, const char * argv[]) { 
    @autoreleasepool { 

     NSArray *arr = [[NSArray alloc] initWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12", nil];   
     arr = [arr sortedArrayUsingSelector:@selector(compare:options:)]; 
    } 
    return 0; 
} 

輸出是:1,10,11,12,2,3,4,5,6,7,8,9按升序對整數的NSArray進行排序。我的代碼有什麼問題?

可有人請幫助如何升序訂購。

+0

使用Collections.Sort看在API – ja08prat

+0

請注意,如果你給你所有1個數字串前導零的代碼將它們歸類到正確的順序:'的NSArray *陣列= @ @「12」,@「07」,@「10」 @ 「03」,@ 「04」,@ 「05」,@ 「06」,@ 「01」,@ 「08」,@ 「09」,@ 「02」,@ 「11」];' –

回答

3

要排序字符串,而不是整數數組,所以這是正確的順序。爲了使一個陣列的整數使用@ 1,@ 2等不@ 「1」,@ 「2」

實際上@ 1,@ 2創建的NSNumber整數對象。 NSArray只能存儲對象。

0

正如@TheBasicMind說,他的回答,你有一個字符串數組,而不是一個整數數組。您按照字符順序排序字符串,而不是數字順序。使用NSNumbers陣列的

基本心靈的解決方案可能是更好的解決方案,因爲它存儲的數值數組,而不是表示數值字符串數組。

另一種解決辦法是重新編寫代碼排序使用字符串排序,使用您的字符串的數值:

NSArray *array = @[@"12", @"7", @"10", @"3", @"4", @"5", 
         @"6", @"1", @"8", @"9", @"2", @"11"]; 

    NSArray *sortedArray = [array sortedArrayUsingComparator: ^NSComparisonResult(
     NSString *string1, 
     NSString *string2) { 
     return [string1 compare: string2 options: NSNumericSearch]; 
    }]; 

    NSLog(@"Sorted array = %@", sortedArray); 

這將產生以下的輸出:

Sorted array = (
    1, 
    2, 
    3, 
    4, 
    5, 
    6, 
    7, 
    8, 
    9, 
    10, 
    11, 
    12 
) 
+0

@vadian ,爲什麼你刪除了你的答案?我沒有意識到/記住'localizedStandardCompare'使用了數字排序規則。這是提供的其他答案的一個很好的選擇。 –

相關問題