什么是遍歷 ?
最近總有剛接觸編程的朋友問(wèn)我什么是遍歷? 那是用來(lái)干什么用的? 今天就來(lái)解釋一下遍歷以及在OC中的具體用法
在眾多計(jì)算機(jī)程序語(yǔ)言中喻粹,數(shù)組是必不可少的數(shù)據(jù)類型。而所謂遍歷就是沿著某條搜索路線依次對(duì)每個(gè)節(jié)點(diǎn)做依次且僅做一次的訪問(wèn)。具體到遍歷數(shù)組掉伏,就是按照數(shù)組下標(biāo)依次訪問(wèn)或操作數(shù)組的每個(gè)元素。如下圖所示。
OC中的字典仆邓,其實(shí)與數(shù)組很像鲜滩。數(shù)組(如圖1)是下標(biāo)與數(shù)組元素的對(duì)應(yīng),而字典节值,則是key與value的對(duì)應(yīng)徙硅。學(xué)過(guò)PHP的人應(yīng)該都很容易理解,因?yàn)镻HP中的數(shù)組就是key與value的對(duì)應(yīng)搞疗。
一嗓蘑、for循環(huán)遍歷
1)遍歷數(shù)組
NSArray *array = [NSArray arrayWithObjects:@"大連", @"北京", @"上海", @"成都", @"深圳", @"天津", nil];
// array.count 可以返回?cái)?shù)組一共有幾項(xiàng)
for (NSInteger i = 0; i < array.count; i++) {
//將對(duì)應(yīng)下標(biāo)的對(duì)象賦值給str,然后打印
NSString *str = array[i];
NSLog(@"%@", str);
}
- 遍歷字典
由于字典是key與value的對(duì)應(yīng), 因此沒(méi)有數(shù)組那樣的下標(biāo)供我們遍歷匿乃。但是NSDictionary提供了兩個(gè)屬性(allKeys 與 allValues)可以將全部的key或value取出放到數(shù)組中, 我們可以遍歷取出的數(shù)組來(lái)達(dá)到遍歷字典的目的桩皿。
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"張三", @"姓名", @"16", @"年齡", @"大連", @"城市", nil];
// 將所有的key取出放入數(shù)組arr中
NSArray *arr = [dic allKeys];
// 遍歷arr 取出對(duì)應(yīng)的key以及key對(duì)應(yīng)的value
for (NSInteger i = 0; i < arr.count; i++) {
NSLog(@"%@ : %@", arr[i], [dic objectForKey:arr[i]]); // dic[arr[i]]
}
二、for-in遍歷
-
遍歷數(shù)組
NSArray *array = @[@"大連",@"上海",@"北京",@"杭州"];
// 數(shù)組array中存放的數(shù)據(jù)類型是NSString
for (NSString *str in array) {
NSLog(@"%@", str);
} -
遍歷字典
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"張三", @"姓名", @"16", @"年齡", @"大連", @"城市", nil];
for (NSString *key in dic) {
NSLog(@"%@ : %@", key, [dic objectForKey:key]);
}
三扳埂、枚舉器
-
遍歷數(shù)組
NSArray *array = @[@"張三", @"趙四", @"小宋", @"劉能"];
// 獲取數(shù)組枚舉器:(正序枚舉)
NSEnumerator *enumerator = [array objectEnumerator];id value = nil;
while (value = [enumerator nextObject]) {
NSLog(@"%@", value);
}// 反向枚舉:(逆序)
enumerator = [array reverseObjectEnumerator];value = nil;
while (value = [enumerator nextObject]) {
NSLog(@"%@", value);
} -
遍歷字典:
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"張嘴", @"姓名", @"23", @"年齡", @"女", @"性別", nil];
NSEnumerator *enumerator2 = [dic objectEnumerator];
id value2 = nil;
while (value2 = [enumerator2 nextObject]) {
NSLog(@"%@", value2);
}