数组C和OC遍历异同浅析

 

 

数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。

对于数组类型说明应注意以下几点:
1.数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。
2.数组名的书写规则应符合标识符的书写规定。 
3.数组名不能与其它变量名相同,例如: 

void main()
{ 
int a;
float a[10];
……
}


是错误的。

 

接下来就说说遍历。这是C语言遍历三维数组

 

#include <stdio.h>

int main(void)
 {
   int row, column, table;

   float values[2][3][5] = {
                            {{1.0, 2.0, 3.0, 4.0, 5.0},
                             {6.0, 7.0, 8.0, 9.0, 10.0},
                             {11.0, 12.0, 13.0, 14.0, 15.0}},

                            {{16.0, 17.0, 18.0, 19.0, 20.0},
                             {21.0, 22.0, 23.0, 24.0, 25.0},
                             {26.0, 27.0, 28.0, 29.0, 30.0}}
                           };

   for (row = 0; row < 2; row++)
    for (column = 0; column < 3; column++)
     for (table = 0; table < 5; table++)
      printf("values[%d][%d][%d] = %f\n", row, column, table, 
        values[row][column][table]);

    return 1;
 }


运行结果

 

 

values[0][0][0] = 1.000000
values[0][0][1] = 2.000000
values[0][0][2] = 3.000000
values[0][0][3] = 4.000000
values[0][0][4] = 5.000000
values[0][1][0] = 6.000000
values[0][1][1] = 7.000000
values[0][1][2] = 8.000000
values[0][1][3] = 9.000000
values[0][1][4] = 10.000000
values[0][2][0] = 11.000000
values[0][2][1] = 12.000000
values[0][2][2] = 13.000000
values[0][2][3] = 14.000000
values[0][2][4] = 15.000000
values[1][0][0] = 16.000000
values[1][0][1] = 17.000000
values[1][0][2] = 18.000000
values[1][0][3] = 19.000000
values[1][0][4] = 20.000000
values[1][1][0] = 21.000000
values[1][1][1] = 22.000000
values[1][1][2] = 23.000000
values[1][1][3] = 24.000000
values[1][1][4] = 25.000000
values[1][2][0] = 26.000000
values[1][2][1] = 27.000000
values[1][2][2] = 28.000000
values[1][2][3] = 29.000000
values[1][2][4] = 30.000000

 

 

 

 

 

 

   数组遍历是编码中很常见的一种需求,上面是C语言的,接下来我们来扒一拔OC里面都有什么样的方法来实现,有什么特点。

    因为OC是兼容C语言的,所以C语言里面的最最常见的for循环遍历是没有问题的。

   本文中用的数组是获取的系统的语言数组,大约有30多个数据,虽然还不够模拟大批量的数据,但对于方法的验证是没有问题的了。

 

NSArray *langArray = [[NSUserDefaults standardUserDefaults] arrayForKey:@"AppleLanguages"];

 

第一种方法是最最熟悉的C语言演化过来的:

 

 

    for (int i = 0; i<langArray.count; i++) {
        NSLog(@"langArray[%d]=%@", i, langArray[i]);
    }


   这个方法最普通,效率也一般,但它也有好处,一是方便针对下标的处理,就是说如果我要处理i==10的情况是很简便的,另一个是可以比较方便的反向遍历。

 

 

 

      Objective-C 1.0里面的NSEnumerator也可以进行遍历,代码如下

    NSEnumerator *enumerator = [langArray objectEnumerator];
    id object;
    while ((object = [enumerator nextObject]) != nil) {
         NSLog(@"langArray=%@", object);
    }


Objective-C发展到2.0时又有了快速遍历功能,代码如下

 

  

 

    for (id object in langArray) {
        NSLog(@"langArray=%@", object);
    }


尤其值得一提的是

 

enumerateObjectsUsingBlock:的方法,代码如下:

 

    [langArray enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        NSLog(@"idx=%d, id=%@", idx, obj);
    }];


由此可见OC兼容C/C++,但是比C更贱灵活方便。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值