大體上,oc中常用的陣列排序有以下幾種方法:sortedarrayusingselector:;sortedarrayusingcomparator:;sortedarrayusingdescriptors:
1、簡單排序(sortedarrayusingselector:)
如果只是對字串的排序,可以利用sortedarrayusingselector:方法就可以了,**如下
?
1
2
3
4
5
6
//簡單排序
void
sortarray1()
當然,除了利用字串自帶的compare:方法,也可以自己寫compare:方法,進行物件的比較;如下:
首先是新建了person類,實現方法如下(標頭檔案就省了):
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#import "person.h"
@implementation person
//直接實現靜態方法,獲取帶有name和age的person物件
+(person *)personwithage:(
int
) age withname:(nsstring *)name
//自定義排序方法
-(nscomparisonresult)compareperson:(person *)person
return
result;
}
@end
主函式**如下:
?
1
2
3
4
5
6
7
8
9
10
void
sortarray2()
2、利用block語法(sortedarrayusingcomparator:)
蘋果官方提供了block語法,比較方便。其中陣列排序可以用sortedarrayusingcomparator:方法,**如下: ?1
2
3
4
5
6
7
8
9
10
void
sortarray3()];
nslog(@
"排序後:%@"
,sortedarray);
}
3、高階排序(sortedarrayusingdescriptors:)
如果是這樣一種情況呢?person類裡有另外乙個類的變數,比如說person類除了name,age變數,還有一輛車car型別,car類裡有個name屬性。對person物件進行排序,有這樣的要求:按照car的name排序,如果是同一輛車,也就是car的name相同,那麼再按照年齡進行排序,如果年齡也相同,最後按照person的name進行排序。
上面這樣就要使用第三種方法,利用排序描述器,不多說,有興趣可以看看api介紹。**如下:
首先寫個car類,實現類car.m**如下:
?
1
2
3
4
5
6
7
8
9
10
#import "car.h"
@implementation car
+(car *)initwithname:(nsstring *)name
@end
然後改寫person類,實現類person.m**如下:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#import "person.h"
#import "car.h"
@implementation person
+(person *)personwithage:(
int
)age withname:(nsstring *)name withcar:(car *)car
//這裡重寫description方法,用於最後測試排序結果顯示
-(nsstring *)description
@end
主函式**如下:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
void
sortarray4()
結果如下:
從結果看出,先按照age排序,如果age相同,按照car排序,如果car相同,按照name排序。
(注意:上面兩種排序方法要想實現字串顯示,請重寫description方法)
Objective C中陣列排序幾種情況的總結
原文 大體上,oc中常用的陣列排序有以下幾種方法 sortedarrayusingselector sortedarrayusingcomparator sortedarrayusingdescriptors 1 簡單排序 sortedarrayusingselector 如果只是對字串的排序,可以...
Objective C學習 陣列排序問題
學到陣列的時候,經常為了資料排序因為排序問題煩惱,樓主也是如此,其實objc為我們提供了很好的排序機制,如下 加文本來解釋一下 main.m nsarraysort 陣列排序 部落格 created by yuewen on 15 9 13.首先定義乙個陣列 nsarray array boy ar...
Objective C陣列小結
objective c陣列相關操作。insert code here.nslog 陣列 指定多個字串建立陣列 nsarray array array nsarray arraywithobjects 0 asd 1 fds 2 哈咯 3 個人 nil 陣列的長度 nslog 陣列長度 d array...