OC中的遍歷與排序

2021-07-10 18:15:13 字數 3321 閱讀 3374

一、列舉器:nsenumerator

定義:

①、能一一枚舉容器類中儲存的元素

②、列舉類不需要自己去建立物件

陣列中運用列舉器

①、定義乙個陣列

nsmutablearray *marray = [@[object1,object2,……objectn

] mutablecopy];

②、獲取陣列的列舉器

nsenumerator *arrenum = [marrayobjectenumerator];

③、用nextobject一一獲取列舉器中的元素,當元素結束時,nextobject返回nil,nextobject方法每呼叫一次,或獲取乙個物件,並且下移

while(id object = [arrenumnextobject])

※注意:在列舉過程中,不能改變被列舉物件

④、獲取陣列的方向列舉器:[arrenumreverseobjectenum]

陣列的快速列舉:for(object in collection)

定義:for in 是對列舉進行封裝後的結果

①、collection :被列舉物件 ----->容器類物件

②、object : 接收元素的變數

字典中運用列舉器

①、建立字典

nsmutabledictionary *mdict =[@ mutablecopy];

②、獲取字典中的key的列舉器

nsmutabledictionary *dictenum = [mdict keyenumerator];

③、用nextobject獲取key值

while(id key = [dictenum nextobject])

※注意:不能改變被列舉物件的值

字典的快速列舉

①、字典的快速列舉只是列舉key值,通過它的key獲取到它的value

for(object  in  mdict)

※注意:不能改變被列舉物件的值

集合中的列舉

①、建立集合

esmutableset *set = [[nsmutableset alloc] initwithobjects: object1, object2, ……objectn ,nil];

②、獲取集合中的列舉器

nsenumerator *setenum = [set objectenumerator];

③、通過nextobject獲取集合的元素

while (id object  = [setenum nextobject]) 

快速列舉

for(id object in set)

二、排序

可變陣列排序方法

[marray sortusingselector: @selector(方法)]

@selector 方法選擇器

三、排序描述類:nssortdescriptor

①、建立乙個可變陣列

nsmutablearray *marray = [@[object1, object2, ……,objectn] mutablecopy];

②、建立描述類

nssortdescriptor *sortdesc = [[nssortdescriptor alloc]initwithkey: 屬性名稱 ascending: (yes\no)];

key: 排序主鍵 --> 物件屬性名稱

ascending: 是否是公升序

③、按照排序描述進行排序

[marray sortusingdescriptors:@[sortdesc1,sortdesc2,……sortdescn];

※注意:

1、引數是陣列,陣列中必須是排序描述類物件

2、如果引數有多個排序描述時,首先按第乙個描述排序,遇到相同屬性,則按第二個進行排序,以此類推,可以多個排序描述

四、block  

1、定義block變數格式:

返回值(^block)(引數列表);

※注意:

①、它的**塊可以在函式內部定義

②、block在定義時沒有返回值型別

③、block在函式體內定義時,不會被馬上被執行

④、注意在右大括號後面記得加分號

2、有參有返回值

int (^block)(int a,int b) = ^(int a,int b);

3、無參無返回值

void (^blockvoid)() = ^();

4、有參無返回值

void(^block)(int a,int b) = ^(int a,int b);

5、無參有返回值

int(^block)() = ^(inta,int b);

6、給block型別命別稱

typedef bool (^comblock)(int a,int b);

※注意:comblock就是bool (^)(int a,int b)block型別的別稱

定義時可以直接:

comblock cc = ^(int a,int b)

7、block和區域性變數

①、在block體中不可以修改區域性變數的值,但

在block體中可以訪問區域性變數的值

②、利用雙下劃線"__block"修飾過的變數,可以在block體中被修改,訪問時的值是block被呼叫時的值

例子:

__block

int number = 10;

comblock cb = ^(int a,int b);

nslog(@"number = %d",number);

number = 100;

number = 10000;

cb(5,2);

nslog

(@"number1 = %d",number);

8、有關block的使用方法

arraytwo = [arraytwo sortedarrayusingcomparator:^nscomparisonresult(id

_nonnull obj1,         id

_nonnull obj2)

else

if ([s1.name

compare:s2.name] < 0)

return

0;}];

nslog(@"

按照姓名排序後的結果:

%@",arraytwo);

注意:arraytwo 是乙個學生類的陣列

OC中陣列的遍歷方法

for迴圈,通過下標遍歷陣列元素 nsarray arr a b c d for nsinteger i 0 i arr count i 正序列舉器 從左到右的順序 把陣列的所有的元素放到列舉器裡 nsarray arr a b c d nsenumerator enum1 arr objecten...

OC中的排序方法例項

oc中排序的方法例項分析 下面是.h檔案 import inte ce person nsobject name void setname nsstring name nsstring name age void setage nsinteger age nsinteger age height v...

OC中self a與 a的用法

person.m inte ce person nsobject property nonatomic,copy nsstring name property nonatomic,copy nsstring void changenamevalue nsstring newname and valu...