OC中四种遍历方式
标准的C语言for循环、Objective-C 1.0出现的NSEnumerator、Objective-C 1.0出现的for in快速遍历、块遍历。
遍历的话,一般是NSArray、NSDictionary、NSSet和自定义的collection。
0、初始化数据
NSArray *array = @[@"ele1", @"ele2", @"ele3", @"ele4"];
NSDictionary *dict = @{@"name" : @"xiaohong", @"age" : @"", @"gendar" : @"woman"};
1、使用for循环
// 遍历数组
for (int i = ; i < array.count; i++) {
NSString *eleString = [array objectAtIndex:i];
NSLog(@"%@", eleString);
}
// 遍历字典
for (int i = ; i < dict.count; i++) {
NSString *valueString = [dict.allValues objectAtIndex:i];
NSLog(@"%@", valueString);
}
// 附加:使用枚举块,forin也能反向遍历
for (NSString *eleString in [array reverseObjectEnumerator]) {
NSLog(@"%@", eleString);
}
2、使用for-in遍历。特点是简洁、高效。但是注意不要在forin循环体中对元素进行修改
// 遍历数组
for (NSString *eleString in array) {
NSLog(@"%@", eleString);
}
// 遍历字典
for (NSString *valueString in dict.allValues) {
NSLog(@"%@", valueString);
}
// 注意:
for (NSString *keyString in dict) {
// keyString就是dict中的key值
}
3、使用枚举器遍历
// 遍历数组
// 为这个数组生成一个顺序的枚举器,reverseObjectEnumerator为倒序枚举器
NSEnumerator *arrayEnumerator = [array objectEnumerator];
// 不能使用NSString *string = nil
NSString *string = @"";
while (string) {
string = [arrayEnumerator nextObject];
if (string != nil) {
NSLog(@"%@", string);
}
}
// 遍历字典
// 为这个字典生成一个遍历key的枚举器,objectEnumerator为遍历value的枚举器
NSEnumerator *dictKeyEnumerator = [dict keyEnumerator];
// 不能使用NSString *string = nil
NSString *keyString = @"";
while (keyString) {
keyString = [dictKeyEnumerator nextObject];
if (keyString != nil) {
NSLog(@"%@", keyString);
}
}
// 附加:使用枚举块,forin也能反向遍历
for (NSString *eleString in [array reverseObjectEnumerator]) {
NSLog(@"%@", eleString);
}
4、基于块枚举。handler中的参数类型和形参名都是可以进行更改的,这样就省去了手动强制转换代码。
// 枚举数组
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%@", obj);
if (idx == array.count - ) {
*stop = YES;
}
}];
// 反向遍历数组
[array enumerateObjectsWithOptions:NSEnumerationReverse
usingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%@", obj);
if (idx == array.count - ) {
*stop = YES;
}
}];
// 枚举字典
[dict enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
NSLog(@"%@", obj);
if ([key isEqualToString:@"name"]) {
*stop = YES;
}
}];
// 反向遍历字典
// 需要注意的是:只有在遍历数组或者有序set等有顺序的collection时,反向遍历才有意义。
OC中四种遍历方式的更多相关文章
- lua中for循环的四种遍历方式
lua中for的四种遍历方式区别 table.maxn 取最大的整数key #table 从1开始的顺序整数最大值,如1,2,3,6 #table == 3 key,value pairs 取每一 ...
- c++ --> c++中四种类型转换方式
c++中四种类型转换方式 c风格转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少缺点, 1)它可以在任意类型之间转换,比如你可以把一个指向const对象的指针转换成指向 ...
- list的四种遍历方式
1.手先增强for循环和iterator遍历的效果是一样的,也就说 增强for循环的内部也就是调用iteratoer实现的,但是增强for循环 有些缺点,例如不能在增强循环里动态的删除集合内容.不能获 ...
- Map 的四种遍历方式
Map 的四种遍历方式 import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class ...
- java集合四种遍历方式
package conection; import java.util.Iterator;import java.util.LinkedList;import java.util.List; publ ...
- HashMap 中7种遍历方式的性能分析
随着 JDK 1.8 Streams API 的发布,使得 HashMap 拥有了更多的遍历的方式,但应该选择那种遍历方式?反而成了一个问题. 本文先从 HashMap 的遍历方法讲起,然后再从性能. ...
- Web.xml中四种验证方式
源地址:https://blog.csdn.net/imimi_/article/details/78805642 <security-constraint> 的子元素 <http- ...
- map的四种遍历方式
map是Java中非常常用的一种数据结构,但map不同于set和list都继承自Collection接口. 所以map没有实现Collection的Iterator 方法,自身没有迭代器来遍历元素. ...
- Java中四种遍历Map对象的方法
方法一:在for-each循环中使用entry来遍历,通过Map.entrySet遍历key和value,这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用. Map<Int ...
随机推荐
- mysql-8.0.18-winx64 环境变量的配置
1. 鼠标右击 此电脑 -->属性 如图:进行步骤 1->2->3 接下来就可以使用命令mysql -u root -p登录mysql了 启动mysql的命令为net ...
- 计算机二级-C语言-程序填空题-190117记录-对文件的处理,复制两个文件,往新文件中写入数据。
//给定程序的功能是,调用函数fun将指定源文件中的内容赋值到指定目标文件中,复制成功时函数返回1,失败时返回0,把复制的内容输出到终端屏幕.主函数中源文件名放在变量sfname中,目标文件名放在变量 ...
- 第八届极客大挑战 Re
0x01.Writeup-RE-CM_2 题目: 解题思路: 1.这个是经过xor的,王老师提示说用xortool,于是放进kali,装好之后执行 xortool CM_2.exe -b, 0.out ...
- No module named '_ctypes'
3.7版本需要一个新的包libffi-devel,安装此包之后再次进行编译安装即可. #yum install libffi-devel -y #make install 若在安装前移除了/usr/b ...
- JAVA单例实现方式(常用)
JAVA单例实现方式(常用) public class Singleton { // Q1:为什么要使用volatile关键字? private volatile static Singleton u ...
- 实现一个简易的Unity网络同步引擎——netgo
实现一个简易的Unity网络同步引擎Netgo 目前GOLANG有大行其道的趋势,尤其是在网络编程方面.因为和c/c++比较起来,虽然GC占用了一部分机器性能,但是出错概率小了,开发效率大大提升,而且 ...
- 世界协调时间(UTC)与中国标准时间
整个地球分为二十四时区,每个时区都有自己的本地时间.在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC, Universal Time Coordinated).UTC与格 ...
- python学习笔记:字符串格式化
% 格式化方法 "我的名字是 %s, 我的年龄是 %d" % (name, age) 常用格式:%[(name)][flags][width].[precision]typecod ...
- Linux :ls 命令
常用命令: ls:列出当前路径下的文件和目录 ls -a:列出当前路径下的所有文件和目录(包括隐藏文件和目录) ls -l:以列表方式显示文件或目录的详细信息 ls -al:可以结合使用 ls xxx ...
- python2.7 一个莫名其妙的错误
先看看错误: Traceback (most recent call last): File "/home/darkchii/文档/PycharmProjects/ml/model.py&q ...