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);
}
OC中几种集合的遍历方法(数组遍历,字典遍历,集合遍历)的更多相关文章
- OC中两种单例实现方式
OC中两种单例实现方式 写在前面 前两天探索了一下C++ 的单例,领悟深刻了许多.今天来看看OC中的单例又是怎么回事.查看相关资料,发现在OC中一般有两种实现单例的方式,一种方式是跟C++ 中类似的常 ...
- jsp中四种传递参数的方法
jsp中四种传递参数的方法如下: 1.form表单 2.request.setAttribute();和request.getAttribute(); 3.超链接:<a herf="i ...
- MySql中4种批量更新的方法update table2,table1,批量更新用insert into ...on duplicate key update, 慎用replace into.
mysql 批量更新记录 MySql中4种批量更新的方法最近在完成MySql项目集成的情况下,需要增加批量更新的功能,根据网上的资料整理了一下,很好用,都测试过,可以直接使用. mysql 批量更新共 ...
- OC中四种遍历方式
标准的C语言for循环.Objective-C 1.0出现的NSEnumerator.Objective-C 1.0出现的for in快速遍历.块遍历. 遍历的话,一般是NSArray.NSDicti ...
- Java中8种常见的排序方法
排序方法的演示1)插入排序(直接插入排序.希尔排序)2)交换排序(冒泡排序.快速排序)3)选择排序(直接选择排序.堆排序)4)归并排序5)分配排序(基数排序)所需辅助空间最多:归并排序所需辅助空间最少 ...
- OC中加载html5调用html方法和修改HTML5内容
1.利用webView控件加载本地html5或者网络上html5 2.设置控制器为webView的代理,遵守协议 3.实现代理方法webViewDidFinishLoad: 4.在代理方法中进行操作H ...
- Python中几种数据结构的整理,列表、字典、元组、集合
列表:shoplist = ['apple', 'mango', 'carrot', 'banana']字典:di = {'a':123,'b':'something'}集合:jihe = {'app ...
- 计算字符串中每种字符出现的次数[Dictionary<char,int>泛型集合用法]
有一道经典的面试题: 统计 welcome to china中每个字符出现的次数,不考虑大小写. 第一个出现在脑海里的想法是: 1. 将字字符串转换成 char数组: 2. 用 for循环遍 ...
- ES6中6种声明变量的方法
相关阅读:http://es6.ruanyifeng.com/#docs/let 相关阅读:https://www.cnblogs.com/ksl666/p/5944718.html 相关阅读:htt ...
随机推荐
- 清除WebLogic8.1缓存
在Domain目录下面有一个以server命名的文件夹,删除整个文件夹就可以了.
- 自动化基础普及之selenium是啥?
Selenium 并不像QTP那样让人一下子就明白是什么?它是编程人员的最爱,但它却对测试新手产生了很大的阻碍. Selenium 是啥? Selenium RC是啥? Webdriver 又是啥? ...
- django 快速实现session的操作
说明: 从这一篇开始就不再完整的介绍django项目的创建过程了,因为前面几篇博客中都详细的介绍了这个创建过程,套路都是一样的,熟悉了这个套路,后面要做的是一些细节技术点的学习和练习. 上一节讲到了d ...
- Sequence.js - 适合电子商务网站的图片滑块
Sequence.js 是一个非常现代的图片滑动效果,特别适合电子商务网站或者企业产品展示功能.带有图片缩率图,能够呈现全屏图片浏览效果.结合 CSS3 Transition 实现响应式的滑块效果. ...
- ToolBar、ActionBar与Menu的纠葛(以及navigationIcon、setHomeButtonEnabled、setDisplayHomeAsUpEnabled)
因为贴图的繁琐...所以下面是无图版...完整的在这里: 探究一下toobar和actionbar在使用menu时的吊诡情况 一.背景介绍 toolbar最近比较火,而且是出出来代替actionbar ...
- 微软开源的30个基础设施项目-C#
.NET Compiler Platform ("Roslyn") .NET Core 5 .NET Micro Framework .NET SDK For Hadoop ASP ...
- asp.net mvc中包含webapi时,token失效产生302的解决方案
public void ConfigureAuth(IAppBuilder app) { app.UseCookieAuthentication(new CookieAuthenticationOpt ...
- 【循序渐进学Python】4. Python中的序列——字典
字典是Python内建的六种序列之一.字典作为一种常用的数据结构,字典中的值没有特定顺序,每个值都对应于一个唯一的键.键可以是数字.字符串甚至是元组. 1. 创建和使用字典 Python中字典可以使用 ...
- 自定义tab在地图进行分页显示
@{ ViewBag.Title = "GIS地图"; Layout = null; } @model HFSoft.Plat.UIWeb.Models.MapShowDataVO ...
- 在uwp仿制WPF的Window
移植WPF软件到uwp时碰到用作对话框的Window有多种处理选择.我个人认为最省事的是用ContentDialog模拟Window. 比如你想把上面这个WPF窗体弄到uwp里面去 1.修改Conte ...