iOS中的遍历(数组NSArray,字典NSDictionary,集合NSSet)
2016-04-05 10:41
561 查看
遍历是我们在代码中经常用到的。下面我总结了在collection中经常用到的四种遍历方式
假设数组为:NSArray *array = @[@"恭", @"喜", @"发", @"财"];
第一种:for循环
数组遍历
for (int i = 0; i < array.count; i++)
{
NSLog(@"object = %@", array[i]);
}字典遍历
NSArray *keys = [dictionary allKeys];
for (int i = 0; i < keys.count; i++)
{
NSLog(@"object = %@", dictionary[keys[i]]);
}集合遍历
第二种:Objective-C 1.0的NSEnumerator来遍历
NSEnumerator有两个方法 -(NSArray*)allObjects; -(id)nextObject; nextObject可以返回枚举里的下个对象,等到枚举中的全部对象都已返回,在调用就返回nil。
数组遍历
NSEnumerator *enumerator = [array objectEnumerator];
id object;
while ((object = [enumerator nextObject]) != nil)
{
NSLog(@"%@", object);
}set遍历
NSEnumerator *enumerator = [set objectEnumerator];
id object;
while ((object = [enumerator nextObject]) != nil)
{
NSLog(@"%@", object);
}字典遍历
第三种:快速遍历 (在for循环里开设了in关键字)
数组遍历for (id object in array)
{
NSLog(@"%@", object);
}
字典遍历
for (id key in dictionary)
{
NSLog(@"%@", dictionary[key]);
}set遍历
数组遍历
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"index = %lu, object = %@", (unsigned long)idx, obj);
}];
字典遍历
<span style="font-size:14px;">[dictionary enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
NSLog(@"key = %@, value = %@", key, obj);
}];</span>
-(void)enumerateObjectsUsingBlock:(void(^)(id Nonnull
obj, NSUInteger idx, BOOL *
_Nonnull stop)) block,这个块有三个参数,分别是当前迭代针对的对象,所针对的下标,以及指向布尔值的指针,通过第三个参数所提供的机制,开发者可以终止遍历操作。
基于块的枚举有点在于:本身就能通过GCD来并发执行遍历操作,无需另行编写代码。遍历数组时,可以知道当前所针对的下标,遍历字典时,无需额外编码,即可同时获取键和值。
假设数组为:NSArray *array = @[@"恭", @"喜", @"发", @"财"];
<pre name="code" class="objc">NSDictionary *dictionary = @{@"新":@"年", @"大":@"吉"};
<pre name="code" class="objc">NSSet *set = [NSSet setWithObjects:@"身", @"体", @"健", @"康", nil];
第一种:for循环
数组遍历
for (int i = 0; i < array.count; i++)
{
NSLog(@"object = %@", array[i]);
}字典遍历
NSArray *keys = [dictionary allKeys];
for (int i = 0; i < keys.count; i++)
{
NSLog(@"object = %@", dictionary[keys[i]]);
}集合遍历
NSArray *objects = [set allObjects]; for (int i = 0; i < objects.count; i++) { NSLog(@"object = %@", objects[i]); }我们发现,在遍历字典和set时,先定义了一个数组,因为根据定义,字典和set都是“无序的”,所以无法根据特定的整数下标来直接访问其中的值。于是,就必须先获取字典里的所有键或是set里的所有对象。
第二种:Objective-C 1.0的NSEnumerator来遍历
NSEnumerator有两个方法 -(NSArray*)allObjects; -(id)nextObject; nextObject可以返回枚举里的下个对象,等到枚举中的全部对象都已返回,在调用就返回nil。
数组遍历
NSEnumerator *enumerator = [array objectEnumerator];
id object;
while ((object = [enumerator nextObject]) != nil)
{
NSLog(@"%@", object);
}set遍历
NSEnumerator *enumerator = [set objectEnumerator];
id object;
while ((object = [enumerator nextObject]) != nil)
{
NSLog(@"%@", object);
}字典遍历
NSEnumerator *enumerator = [dictionary keyEnumerator]; id key; while ((key = [enumerator nextObject]) != nil) { NSLog(@"%@", [dictionary objectForKey:key]); }遍历字典的方式与数组或set略有不同,因为字典里既有键也有值,所以要根据给定的键把对应的值提取出来。
第三种:快速遍历 (在for循环里开设了in关键字)
数组遍历for (id object in array)
{
NSLog(@"%@", object);
}
字典遍历
for (id key in dictionary)
{
NSLog(@"%@", dictionary[key]);
}set遍历
for (id object in set) { NSLog(@"%@", object); }第四种:基于块的遍历方式
数组遍历
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"index = %lu, object = %@", (unsigned long)idx, obj);
}];
字典遍历
<span style="font-size:14px;">[dictionary enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
NSLog(@"key = %@, value = %@", key, obj);
}];</span>
-(void)enumerateObjectsUsingBlock:(void(^)(id Nonnull
obj, NSUInteger idx, BOOL *
_Nonnull stop)) block,这个块有三个参数,分别是当前迭代针对的对象,所针对的下标,以及指向布尔值的指针,通过第三个参数所提供的机制,开发者可以终止遍历操作。
基于块的枚举有点在于:本身就能通过GCD来并发执行遍历操作,无需另行编写代码。遍历数组时,可以知道当前所针对的下标,遍历字典时,无需额外编码,即可同时获取键和值。
相关文章推荐
- 文件遍历排序函数
- ruby 数组使用教程
- Ruby中的数组和散列表的使用详解
- C#实现AddRange为数组添加多个元素的方法
- C#比较二个数组并找出相同或不同元素的方法
- C#动态调整数组大小的方法
- Lua 学习笔记之C API 遍历 Table实现代码
- 详解Lua中的数组概念知识
- Perl中的列表和数组学习笔记
- 探索PowerShell (八) 数组、哈希表(附:复制粘贴技巧)
- C#中数组初始化与数组元素复制的方法
- C#交错数组用法实例
- Linux Shell 数组建立及使用技巧
- PowerShell数组的一些操作技巧
- C#通过yield实现数组全排列的方法
- C#不重复输出一个数组中所有元素的方法
- C#实现将数组内元素打乱顺序的方法
- C#遍历文件夹后上传文件夹中所有文件错误案例分析
- C#中遍历Hashtable的4种方法
- C#中用foreach语句遍历数组及将数组作为参数的用法