// 先分别初始化数组、字典和集合,然后分别用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);

}

OC中几种集合的遍历方法(数组遍历,字典遍历,集合遍历)的更多相关文章

  1. OC中两种单例实现方式

    OC中两种单例实现方式 写在前面 前两天探索了一下C++ 的单例,领悟深刻了许多.今天来看看OC中的单例又是怎么回事.查看相关资料,发现在OC中一般有两种实现单例的方式,一种方式是跟C++ 中类似的常 ...

  2. jsp中四种传递参数的方法

    jsp中四种传递参数的方法如下: 1.form表单 2.request.setAttribute();和request.getAttribute(); 3.超链接:<a herf="i ...

  3. MySql中4种批量更新的方法update table2,table1,批量更新用insert into ...on duplicate key update, 慎用replace into.

    mysql 批量更新记录 MySql中4种批量更新的方法最近在完成MySql项目集成的情况下,需要增加批量更新的功能,根据网上的资料整理了一下,很好用,都测试过,可以直接使用. mysql 批量更新共 ...

  4. OC中四种遍历方式

    标准的C语言for循环.Objective-C 1.0出现的NSEnumerator.Objective-C 1.0出现的for in快速遍历.块遍历. 遍历的话,一般是NSArray.NSDicti ...

  5. Java中8种常见的排序方法

    排序方法的演示1)插入排序(直接插入排序.希尔排序)2)交换排序(冒泡排序.快速排序)3)选择排序(直接选择排序.堆排序)4)归并排序5)分配排序(基数排序)所需辅助空间最多:归并排序所需辅助空间最少 ...

  6. OC中加载html5调用html方法和修改HTML5内容

    1.利用webView控件加载本地html5或者网络上html5 2.设置控制器为webView的代理,遵守协议 3.实现代理方法webViewDidFinishLoad: 4.在代理方法中进行操作H ...

  7. Python中几种数据结构的整理,列表、字典、元组、集合

    列表:shoplist = ['apple', 'mango', 'carrot', 'banana']字典:di = {'a':123,'b':'something'}集合:jihe = {'app ...

  8. 计算字符串中每种字符出现的次数[Dictionary<char,int>泛型集合用法]

    有一道经典的面试题: 统计 welcome to china中每个字符出现的次数,不考虑大小写.      第一个出现在脑海里的想法是: 1. 将字字符串转换成 char数组: 2. 用 for循环遍 ...

  9. ES6中6种声明变量的方法

    相关阅读:http://es6.ruanyifeng.com/#docs/let 相关阅读:https://www.cnblogs.com/ksl666/p/5944718.html 相关阅读:htt ...

随机推荐

  1. MySQL批量SQL插入性能优化

    对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长.特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久.因此,优化数据库插入性能是很有意义的. ...

  2. CSS实例

    CSS 实例 CSS背景 设置页面的背景颜色 设置不同元素的背景颜色 设置一个图像作为页面的背景 错误的的背景图片 如何在水平方向重复背景图像 如何定位背景图像 一个固定的背景图片(这个图片不会随页面 ...

  3. PE渲染引擎 一

    PE是我业余时间做的一个纯dx11的渲染框架.主要就是练手.如果有时间,会把它“扩展”成真正的引擎(标配至少要有个对应的编辑器吧 -_!!). 目前实现的有: obj文件加载,binormal计算. ...

  4. LoRaWAN协议(三)--Server端数据协议

    LoRaWAN Server 端架构 LoRaWAN 的server包括 NS(Network server).AS(application server).CS(Custom server).... ...

  5. 【转载】SHELL字符串处理技巧(${}、##、%%)

    转载自:http://www.cnblogs.com/pmars/archive/2013/02/17/2914444.html 在SHELL编程中,经常要处理一些字符串变量.比如,计算长度啊.截取子 ...

  6. Hadoop入门进阶课程8--Hive介绍和安装部署

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan  ...

  7. Redis设计与实现-持久化篇

    redis数据库 默认16个数据库,每个数据库由一个redis.h/redisDb结构表示,此结构里的dict字典与expires字典,其中dict保存了该库所有键值对,此字典即为键空间:expire ...

  8. [Solution] 一步一步WCF(2) 终结点Endpoint

    繁忙的一天又一天,不管其他,先继续WCF吧. Endpoint包含地址,绑定,契约三要素.WCF作为一个Windows平台下最大的通信框架.通过终结点承载了所有通信功能.所以终结点的作用将非常重要. ...

  9. asp.net 前台绑定后台变量方法总结:<%= %> 和<%# %>的区别

    经常会碰到在前台代码中要使用(或绑定)后台代码中变量值的问题.一般有<%= str%>和<%# str %>两种方式,这里简单总结一下.如有错误或异议之处,敬请各位指教.  一 ...

  10. JMS学习(二)- JMS Message Model 组成介绍及消息头详解

    一.前言 从本文起依次详细介绍JMS中的一些重要的概念,主要参考了官方的JMS1.1的文档,该文档很老了,是02年的,那年,JAVA还没有被Oracle收购..本文主要介绍Message及其相关概念, ...