OC中幾種集合的遍歷方法(數組遍歷,字典遍歷,集合遍歷)


// 先分別初始化數組、字典和集合,然后分別用for循環、NSEnumerator枚舉器和forin循環這三個方法來實現遍歷

NSArray *array = @[@"yinhao", @"yinxiao", @"yinshuanghao", @"yindongdong"];

 

NSDictionary *dict = @{

                       @"name" : @"LeBron",

                       @"age" : @30,

                       @"sex" : @"",

                       @"hobby" : @"NBA"

                       };

 

NSSet *set = [NSSet setWithObjects:@"genie", @"weizhuang", @"tianming", @"shaoyu", @"高月", @"shilan", nil];

 

 

/**

 *  1.for循環遍歷

 */

 

// for循環遍歷數組

for (NSUInteger i = 0; i < array.count; i++) {

    // 根據數組下標訪問相應的元素

    //NSString *str = [array objectAtIndex:i];

    NSString *str = array[i];   // 兩種方法一樣的

    NSLog(@"%@", str);

}

 

 

// for循環遍歷字典

// 獲取字典中所有的key

NSArray *keys = [dict allKeys];

// 遍歷keys數組,訪問相應的value

for (NSUInteger i = 0; i < keys.count; i++) {

    // 通過下標獲取每個key

    NSString *key = keys[i];

    //id value = [dict objectForKey:key];

    id value = dict[key];    // 兩種方法一樣的

    NSLog(@"%@", value);

}

 

 

// for循環遍歷集合

// 取出所有元素存放在數組中

NSArray *setArray = [set allObjects];

for (NSUInteger i = 0; i < setArray.count; i++) {

    //NSLog(@"%@", setArray[i]);

    NSLog(@"%@", [setArray objectAtIndex:i]);   // 兩種方法一樣的

    

}

 

 

 

/**

 *  2.NSEnumerator 枚舉器遍歷

 */

 

// NSEnumerator 遍歷數組(正序)

// 創建正序的枚舉器對象

NSEnumerator *arrayEnum = [array objectEnumerator];

id value = nil// 存儲數組中的元素對象

// 判斷value不為空打印數據

while ((value = [arrayEnum nextObject]) != nil) {

    NSLog(@"%@", value);

}

 

 

// NSEnumerator 遍歷數組(倒序)

// 創建倒序的枚舉器對象

NSEnumerator *arrayEnum1 = [array reverseObjectEnumerator];

id value1 = nil;

while (value1 = [arrayEnum1 nextObject]) {

    NSLog(@"%@", value1);

}

 

 

// NSEnumerator 遍歷字典

// 遍歷到的是字典中的object值,字典中存放的數據是無序的,沒有反向枚舉的概念

NSEnumerator *dictEnum = [dict objectEnumerator];

id value2 = nil;   // 存儲字典中的value數據

while (value2 = [dictEnum nextObject]) {

    NSLog(@"%@", value2);

}

 

 

// NSEnumerator 遍歷集合

// 遍歷到的是集合中的object值,集合中存放的數據也是無序的,也沒有反向枚舉的概念

NSEnumerator *setEnum = [set objectEnumerator];

id value3 = nil;    // 存儲集合中的value數據

while (value3 = [setEnum nextObject]) {

    NSLog(@"%@", value3);

}

 

 

// NSEnumerator遍歷,不能刪除其中的元素,使用for循環遍歷數組可以修改其中的內容

// 以下兩種刪除或者修改數組中某個元素,只能通過for循環遍歷數組來修改,不能使用NSEnumerator遍歷來刪除或修改

NSMutableArray *mArray = [NSMutableArray arrayWithArray:array];

NSEnumerator *arrayEnum2 = [mArray objectEnumerator];

id value4 = nil;

while (value4 = [arrayEnum2 nextObject]) {

    if ([value4 isEqualToString:@"yindongdong"]) {

        [mArray removeObject:value4];

        NSLog(@"%@", value4);

    }

    NSLog(@"%@", value4);

}

 

NSMutableArray *mArray1 = [NSMutableArray arrayWithArray:array];

for (int i = 0; i < mArray1.count; i++) {

    if ([mArray1[i] isEqualToString:@"yindongdong"]) {

        [mArray1 removeObject:mArray1[i]];

    }

}

NSLog(@"%@", mArray1);

 

 

 

/**

 *  3.for...in遍歷

 */

// for...in遍歷數組

for (NSString *str in array) {

    NSLog(@"%@", str);

}

 

 

// for...in遍歷字典 (得到key,根據key訪問value)

for (NSString *key in dict) {

    NSLog(@"%@", dict[key]);  // 兩種方法一樣

    //NSLog(@"%@", [dict objectForKey:key]);

}

 

 

// for...in遍歷集合 (等到集合中的元素對象)

for (id obj in set) {

    NSLog(@"%@", obj);

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM