NSArray排序的一些方法

2022-07-23 08:03:13 字數 1883 閱讀 5262

/*

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

sortedarrayusingselector:

sortedarrayusingcomparator:

sortedarrayusingdescriptors:

*//*

1、簡單排序(sortedarrayusingselector:)

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

*///

簡單排序

void

sortarray1()

/*當然,除了利用字串自帶的compare:方法,也可以自己寫compare:方法,進行物件的比較;如下:

首先是新建了person類,實現方法如下(標頭檔案就省了):

*/#import

"person.h

"@implementation

person

//直接實現靜態方法,獲取帶有name和age的person物件

+(person *)personwithage:(int) age withname:(nsstring *)name

//自定義排序方法

-(nscomparisonresult)compareperson:(person *)person

return

result;

}@end

//主函式**如下:

void

sortarray2()

/*2、利用block語法(sortedarrayusingcomparator:)

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

*/void

sortarray3()];

nslog(

@"排序後:%@

",sortedarray);}/*

3、高階排序(sortedarrayusingdescriptors:)

如果是這樣一種情況呢?person類裡有另外乙個類的變數,比如說person類除了name,age變數,還有一輛車car型別,car類裡有個name屬性。對person物件進行排序,有這樣的要求:按照car的name排序,如果是同一輛車,也就是car的name相同,那麼再按照年齡進行排序,如果年齡也相同,最後按照person的name進行排序。

上面這樣就要使用第三種方法,利用排序描述器,不多說,有興趣可以看看api介紹。**如下:

首先寫個car類,實現類car.m**如下:

*/#import

"car.h

"@implementation

car+(car *)initwithname:(nsstring *)name

@end

//然後改寫person類,實現類person.m**如下:

#import

"person.h

"#import

"car.h

"@implementation

person

+(person *)personwithage:(int)age withname:(nsstring *)name withcar:(car *)car

//這裡重寫description方法,用於最後測試排序結果顯示

-(nsstring *)description

@end

//主函式**如下:

void

sortarray4()

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

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

*/

NSArray的一些方法

nsarray 不可變陣列類 建立只有乙個元素的陣列 arraywithobject nsarray建立的陣列內部存放的元素必須是 物件 型別 nsarray array nsarray arraywithobject 1 arraywithobject接收的引數是 物件 型別資料,1 可以看做是乙...

NSArray方法 排序

nsarray用來儲存物件的有序列表,可以放入任何型別的物件,但它有兩個限制 首先,它只能儲存oc的物件,不能儲存c中的基本資料型別,如 int float enum struct 和隨機指標 其次不能在nsarray中儲存nil。建立陣列 nsarray array1 一年級 二年級 三年級 四年...

一些排序方法

從網上找了一些排序方法,可能以後用的著,自己先編寫一下,然後存下來 1.冒泡法 思想 1.從a 0 到a n 相鄰的兩個數進行比較,如果滿足條件則交換,如此反覆。2.這種演算法要經過n 1輪的大迴圈。以下是維基百科思想 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工...