1、集合遍歷集合(collection):oc中提供的容器類:陣列,字典,集合。
遍歷:對集合中元素依次取出的過稱叫做遍歷。
三種方式:① for迴圈遍歷; ② nsenumerator遍歷; ③ for...in遍歷
原理:通過for迴圈的迴圈變數用作陣列元素下標來獲取不同下標的元素。
迴圈次數就是陣列元素的個數。
1//陣列
2for (int i = 0; i < arr.count; i++)
原理:先獲取字典中所有的key,儲存到陣列中,遍歷陣列依次取出每乙個key,然後根據key從字典中取出對應的value
迴圈次數就是字典元素的個數。
1//字典2//
獲取字典中所有的key值
3 nsarray *allkey =[dict allkeys];4//
遍歷key值陣列,訪問對應的object值
5for (int i = 0; i < allkey.count; i++)
原理:用集合的allobjects屬性先取到集合的所有元素儲存到陣列中,再通過for迴圈的迴圈變數用作下標來取到每個元素。
1//集合2//
取出集合中的所有元素放到陣列中
3 nsarray *setarray = [set
allobjects];
4for (int i = 0; i < setarray.count; i++)
列舉器,遍歷集合中的元素。
依附於集合類(nsarray,nsset,nsdictionary),沒有用來建立例項的介面。
nsenumerator的 nextobject 方法可以遍歷每個集合元素,結束返回 nil ,通過與 while 結合使用可遍歷集合中所有元素。
對可變集合(陣列,字典,集合
)進行列舉操作時,不能通過新增或刪除物件這類方式來改變集合容器的元素個數。
正序(objectenumerator)
1//陣列(正序)2//
建立正序的列舉器物件
3 nsenumerator *arrayenum1 =[arr objectenumerator];
4id value1 =nil;5//
判斷value部位空列印資料
6while ((value1 =[arrayenum1 nextobject]))
倒序(reverseobjectenumerator)
1//陣列(倒序)2//
建立倒序的列舉器物件
3 nsenumerator *arrayenum2 =[arr reverseobjectenumerator];
4id value2 =nil;
5while ((value2 =[arrayenum2 nextobject]))
注:列舉器的nextobject方法只能取出乙個物件,所以需要和while迴圈結合把所有元素依次取出。
③ 字典遍歷
1//字典2//
遍歷到的是字典中的value值
3 nsenumerator *dictenum =[dict objectenumerator];
4id value3 =nil;
5while ((value3 =[dictenum nextobject]))
注:字典中存放的資料是無序的,沒有反向列舉的概念。
④ 集合遍歷
1//集合
2 nsenumerator *setenum = [set
objectenumerator];
3id value4 =nil;
4while ((value4 =[setenum nextobject]))
注:集合中存放的資料是無序的,沒有反向列舉的概念。
for...in:快速列舉,是在nsenumerator的基礎上封裝的更加方便的快速的遍歷集合元素的方式。
格式:for (集合中物件的型別 * 元素名 in
被遍歷的集合)
對可變集合(陣列,字典,集合
)進行快速列舉操作時,不能通過新增或刪除物件這類方式來改變集合容器的元素個數。
② 陣列遍歷
1//陣列
2for (id value in
arr)
③ 字典遍歷
1//字典 遍歷的是字典的key
2for (id value in
dict)
④ 集合遍歷
1//集合
2for (id value in
set)
陣列是有序容器,因此集合中只有陣列才能排序。
該類能夠方便的實現對陣列中的物件進行公升序或者降序的排序。
它可以把元素的某個屬性作為key進行公升序或降序的排序,每個nssortdescriptor物件就是乙個排序條件。
初始化方法
- (instancetype)initwithkey:(nsstring *)key ascending:(bool)ascending;
key:按照陣列中物件的哪個屬性進行排序,如果陣列中存放的是能夠直接排序的物件(比如:字串),直接使 @"self" 或者 nil 即可;如果存放的是自定義類的物件,使用想要進行排序的屬性名即可(比如:想按照person類的name進行排序, 使用 @"name" 作為引數)。
ascending:排序的標誌,是公升序還是降序。 yes - 公升序, no -
降序。nssortdescriptor建立
1 nssortdescriptor *sortdes1 = [[nssortdescriptor alloc] initwithkey:@"self" ascending:yes]; //公升序 2 nssortdescriptor *sortdes2 = [[nssortdescriptor alloc] initwithkey:@"name" ascending:no]; //降序
排序
1//基本資料型別不可變陣列
2 array =[array sortedarrayusingdescriptors:@[sortdes1]];
3 nslog(@"%@"
, array);4//
自定義物件不可變陣列5//
按照名字排序
6 personarray =[personarray sortedarrayusingdescriptors:@[sortdes2]];
7 nslog(@"
%@", personarray);
② 可變陣列 排序
1//基本型別可變陣列
2[marray sortusingdescriptors:@[sortdes1]];
3 nslog(@"%@"
, marray);4//
自定義物件可變陣列5//
按照名字排序
6[personmarray sortusingdescriptors:@[sortdes2]];
7 nslog(@"
%@", personmarray);
- (nsarray *)sortedarrayusingselector:(sel)comparator;
注:sel型別的引數comparator:需要傳入乙個返回結果是nscomparisonresult的方法名。
1//不可變陣列(基本資料型別)
2 array =[array sortedarrayusingselector:@selector(compare:)];
3 nslog(@"%@"
, array);4//
不可變的陣列(自定義型別的物件)5//
按照名字排序
6 personarray = [personarray sortedarrayusingselector:@selector(comparebyname:)]; //
comparebyname為person類中自定義的方法
7 nslog(@"
%@", personarray);
- (void)sortusingselector:(sel)comparator;
注:sel型別的引數comparator:需要傳入乙個返回結果是nscomparisionresult的函式
1//可變陣列(基本資料型別)
2[marray sortusingselector:@selector(compare:)];
3 nslog(@"%@"
, marray);4//
可變的陣列(自定義型別的物件)5//
按照名字排序
6[personmarray sortusingselector:@selector(comparebyname:)];
7 nslog(@"
%@", personmarray);
person類中comparebyname方法:
1//比較方法的宣告
2 - (nscomparisonresult)comparebyname:(person *)anotherperson;3//
比較方法的實現
4 - (nscomparisonresult)comparebyname:(person *)anotherperson
iOS學習16之OC集合遍歷和陣列排序
集合 collection oc中提供的容器類 陣列,字典,集合。遍歷 對集合中元素依次取出的過稱叫做遍歷。三種方式 for迴圈遍歷 nsenumerator遍歷 for.in遍歷 原理 通過for迴圈的迴圈變數用作陣列元素下標來獲取不同下標的元素。迴圈次數就是陣列元素的個數。1 陣列 2for i...
iOSDay19之OC類的擴充套件
為乙個類擴充套件功能 1.子類化 2.修改源 3.定義協議 4.category 類目 category 也叫分類,類目,是為沒有源 的類擴充功能。擴充的功能會成為原有類的一部分,可以通過原有類或者原有類的物件直接呼叫,並且可繼承。該方法只能擴充方法,不能擴充例項變數。作為子類的替代手段 不需要定義...
OC之集合家族
nsarray是乙個cocoa類,用來儲存物件的有序列表,你可以在其中放入任意型別的物件 nsstring或者是其他你想要儲存的物件,但只能是儲存objective c的物件,而不能儲存c語言中的基本資料型別,如int float enum struct,或者nsarray中的隨機指標,同時也不能在...