zoukankan      html  css  js  c++  java
  • objective-c系列-NSArray

    OC数组NSArray

        对比         c数组                     oc数组对象(指针)

      定义         int array[10];              NSArray *array

      特点:        元素类型必须相同,         元素可以是任意对象

                     而且只能c的数据类型      但是不能是c的数据类型

      字面常量:  (数组类型){1,2,3}     @[@"one",@"two"]

                     表达一个数组常量

      访问元素: array[i]                      ?

    **********************************************

    //oc数组对象的构造方法

    //    NSArray * arr1 = [[ NSArray alloc]init]; //这种构造无意义

        NSArray * arr1 = [[ NSArray alloc]initWithObjects:@"one",@"two",@"three"nil];

        NSLog(@"arr1: %@ 地址:%p",arr1,arr1);

        

        NSArray * arr2 = [[ NSArray alloc]initWithArray:arr1];

        NSLog(@"arr2: %@ 地址:%p",arr2,arr2);

        

        

    #define ARRAY1 @[@"one",@"two",@"three"]

    //    NSArray * arr3 = @[@"one",@"two",@"four"];

        NSArray * arr3 = ARRAY1//ARRAY1放在某一个常量区地址

        NSLog(@"arr3: %@",arr3);

        

        NSArray * arr4 = ARRAY1//ARRAY1放在了另一个常量区的地址

        NSLog(@"arr3:%p, arr4:%p",arr3,arr4);

    // 地址不同!!

    **********************************************

    // 类方法

      NSArray * arr1= [NSArray arrayWithObjects:@"one",@"two"nil];

        NSArray * arr2 =[NSArray arrayWithArray:arr1];

        NSArray *array = @[@"123",@"456",@"789",@"abc",@"def"];

    **********************************************

    //将数组里的所有字符串对象拼接成一个字符串对象并返回

        NSArray * array = @[@"there",@"is",@"a",@"girl" ];

        NSString * result = [array componentsJoinedByString:nil];

        

        NSLog(@"result: %@  长度为:%lu", result, [result length]);

    **********************************************

    //分割字符串,需要用到一个分割符字符串分割后的结果放在数组里

        NSString * str = @"there is a beautiful girl in my heart,but she is not my wife";

        NSArray * array = [str componentsSeparatedByString:@" "];

        NSLog(@"array: %@", array);

    // 这样的话,heart,but就变成一个单词了,与我们的意图相悖

    所以:

        NSCharacterSet *setSeparate = [NSCharacterSet characterSetWithCharactersInString:@", "];// 注意:@", "字符串包括一个@","和一个@" "!这和c中的拆分字符串方法很类似,可以添加多个拆分字符

        NSArray * aha = [str componentsSeparatedByCharactersInSet:setSeparate];

     

    注意:当拆分字符或字符串在被拆分字符串中联系出现时,拆分后放到数组里的对象就会 有一个@"",空对象!

    打印或者计数方法都会受影响,解决办法: [aha removeObject:@""];// 移除所有在数组中的@""对象

    **********************************************

    //在一个数组中查询某一个对象是否存在

        NSArray * array = @[@"one",@"two",@"three",@"four",@"two"];

        

        if ([array containsObject:@"one"]==YES)

        {

            NSLog(@"one在数组中存在");

            //    如果one在数组中存在,那么它肯定有一个下标,

            NSUInteger index = [array indexOfObject:@"one"];

            NSLog(@"one的下标为: %lu", index);

        }

        else

        {

            NSLog(@"one在数组中不存在");

        }

        //获取一个对象在数组中的下标,如果对象在数组中不存在,则返回NSNotFound

        if( [array indexOfObject:@"jobs"] == NSNotFound )

            NSLog(@"jobs 在数组中不存在");

    **********************************************

    // 访问元素

        NSArray * arr1 = @[@"one",@"two",@"three"];

        //用下标运算符访问某个元素

        NSLog(@"arr[1] is %@", arr1[1]);

        

        //调方法访问某个元素

        NSLog(@"objectAtIndex:1  == %@", [arr1 objectAtIndex:1]);

     

        //获取元素数量

        NSLog(@"arr1的元素个数为: %lu", [arr1 count]);

        

        //遍历数组对象

        //1,  用循环和下标运算符遍历

        NSUInteger i;

        for (i=0; i<[arr1 count]; i++) {

            NSLog(@"arr[%lu]=%@", i,arr1[i]);

        }

        //2,  用循环和方法objectAtIndex 完成遍历

        for (i=0; i<[arr1 count]; i++) {

            NSLog(@"[arr1 objectAtIndex:%lu] == %@", (unsigned long)i, [arr1 objectAtIndex:i]);

        }

        

        //3,  快速枚举法

        forid obj in arr1)    // for(int i=0;i<10;i++)

        {

            NSLog(@"快速枚举法:obj=[%@]",obj);

        }

        //4,枚举器法,  首先认识一种枚举器对象

        //               枚举器对象        这个方法是获取一个数组的枚举器

        //                                  正序枚举器

        NSEnumerator * enumerator =[arr1 objectEnumerator];

        id obj;

        while (obj = [enumerator nextObject]) {

            NSLog(@"正序枚举器法遍历: obj == %@", obj);

        }

        //                                     逆序枚举器

        NSEnumerator *enumerator2 = [arr1 reverseObjectEnumerator];

       

        while (obj = [enumerator2 nextObject]) {

            NSLog(@"逆序枚举器法遍历: obj == %@", obj);

        }

    **********************************************

    //数组排序

     // 要回调的函数

    NSInteger compareTwoObjects(id obj1, id obj2, void * args)

    {

    //    struct student * stu = args;

    //    printf("args:%s ",args);

        //1,比较字符串大小

    //    return [obj1 compare:obj2];

        

        //2, 比较字符串的长度

        return [obj1 length]-[obj2 length];

        

        //3, 将字符串转成整型,再比较整型的大小

    //    return [obj1 integerValue]-[obj2 integerValue];

    }

     

     

        NSArray *array = [[ NSArray alloc]initWithObjects:@"123",@"4567",@"34",@"111"@"x",nil];

        //  对数组的元素进行排序传进来的是一个回调函数,用于处理比较细节

       NSArray * newArray =  [array sortedArrayUsingFunctioncompareTwoObjects context:"testString"];

     

    **********************************************

    数组排序方法sortedArrayUsingFunction:context:在官方文档里有很详细的介绍,并且有相关例子可供参考

    **********************************************

  • 相关阅读:
    (数据集)Quality of Web Service (QWS) Datasets
    [扫盲] Salesforce.com: 业界云计算(Cloud Computing)的主要倡导者之一
    Major conference/journal for Web Service [updating]
    ICWS 2009 Accepted Research Paper List (63篇)
    [论文笔记]Web服务集成的策略规划 (CIMS 2008)
    [论文笔记]Global and Local QoS Guarantee in Web Service Selection (BPM 2005)
    [论文笔记](东北大学)基于组合服务执行信息的服务选取方法研究(计算机学报, 2008)
    WWW2009相关论文
    [文章笔记]Web Service Discovery and Client Goals(Computers, 2009)
    [论文笔记](东北大学)支持组合服务选取的QoS模型及优化求解(计算机学报06)
  • 原文地址:https://www.cnblogs.com/hyuganatsu/p/NSArray.html
Copyright © 2011-2022 走看看