2013-02-18 101 views
0

我將數值從200到1作爲字符串存儲在名爲beaus的數組中。如何按iOS中的最大值和最小值排序

NSSortDescriptor *sortDesc = [NSSortDescriptor sortDescriptorWithKey:@"dataoflar" ascending:NO]; 
    [beaus sortUsingDescriptors:@[sortDesc]]; 

但是,這隻能按第一個數字排序(2在10以上)。有什麼方法可以按數量排序?

+0

請更確切地說明這個值是什麼類型?的NSString?或int ?,什麼類型是「dataoflar」 – AlexWien 2013-02-18 18:33:05

+0

爲什麼你將數字存儲爲字符串?爲什麼不把它們存儲爲數字? – rmaddy 2013-02-18 18:33:11

+0

這是我帶來數據的方式。有什麼方法可以在數組中將它們轉換爲數字嗎?......不,這些數據必須由字符串引入,否則我會改變它。 – user1803649 2013-02-18 18:37:39

回答

1

對其進行排序,您可以這樣更新您的排序描述:

NSSortDescriptor *sortDesc = [NSSortDescriptor sortDescriptorWithKey:@"dataoflar.integerValue" ascending:NO]; 
[beaus sortUsingDescriptors:@[sortDesc]]; 

這將得到每個字符串的整數值,排序將基於該數字而不是字符串值。

-2

如果你必須使用字符串,然後用零填充你的數字,那麼它會像你想要的那樣排序,而不是其他的更改,如下所示: '002'而不是'2'和'034'而不是' 34'

+0

你不能將一個NSString強制轉換爲NSUIntger! – AlexWien 2013-02-18 18:51:03

+0

如果你必須使用字符串,然後左邊用零填充你的數字,那麼它會像你想要的那樣排序,沒有其他變化,像這樣:'002'而不是'2'和'034'而不是'34' – jonathan3087 2013-02-18 18:54:02

+0

更糟你做不到? – AlexWien 2013-02-18 18:59:20

0

如果由於某種原因,你不想給字符串轉換導入過程中爲int,你 必須編寫和使用自己的選機:

這顯示瞭如何通過財產‘datatoflat’beause排序包含數字的NSString類型。排序完成升序。最後一行爲return (i1- i2)

NSArray *sortedArray; 
sortedArray = [beaus sortedArrayUsingComparator:^NSComparisonResult(id a, id b) { 
    NSString* s1 = [(NSString*) a dataoflar]; 
    NSString* s2 = [(NSString*) b dataoflar]; 

    int i1 = [s1 integerValue]; 
    int i2 = [s2 integerValue]; 
    return (i2 - i1); 
}]; 
1

假設也沒關係,該值是最後一個數組中NSString的,你應該這樣

NSMutableArray *mutableBeaus = [[beaus mutableCopy] autorelease]; 
[mutableBeaus sortUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) { 
    return [obj1 compare:obj2 options:NSNumericSearch]; 
}]; 

// mutableBeaus now has the array sorted in an ascending order 1 < 002 < 3 
相關問題