Objective C中陣列排序幾種情況的總結

2021-07-03 14:30:44 字數 3984 閱讀 5911

原文:

大體上,oc中常用的陣列排序有以下幾種方法:sortedarrayusingselector:;sortedarrayusingcomparator:;sortedarrayusingdescriptors:

1、簡單排序(sortedarrayusingselector:)

如果只是對字串的排序,可以利用sortedarrayusingselector:方法就可以了,**如下 ?

1

2

3

4

5

6

//簡單排序

voidsortarray1()

當然,除了利用字串自帶的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

returnresult;

}

@end

主函式**如下: ?

1

2

3

4

5

6

7

8

9

10

voidsortarray2()

2、利用block語法(sortedarrayusingcomparator:)

蘋果官方提供了block語法,比較方便。其中陣列排序可以用sortedarrayusingcomparator:方法,**如下:

? 1

2

3

4

5

6

7

8

9

10

voidsortarray3()];

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

voidsortarray4()

結果如下:

從結果看出,先按照age排序,如果age相同,按照car排序,如果car相同,按照name排序。

(注意:上面兩種排序方法要想實現字串顯示,請重寫description方法)

Objective C中陣列排序幾種情況的總結

大體上,oc中常用的陣列排序有以下幾種方法 sortedarrayusingselector sortedarrayusingcomparator sortedarrayusingdescriptors 1 簡單排序 sortedarrayusingselector 如果只是對字串的排序,可以利用s...

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...