欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS数组、字典、集合解析

程序员文章站 2022-08-21 18:03:22
数组 1、固定数组 1.创建数组(不可变数组创建后不可变,在创建的时候要初始化) //对象方法 [[nsarray alloc] initwithobjects:(id...

数组

1、固定数组
    1.创建数组(不可变数组创建后不可变,在创建的时候要初始化)
        //对象方法 [[nsarray alloc] initwithobjects:(id),nil]
        nsarray * array = [[nsarray alloc] initwithobjects:@"one",@"2",@"2.3",@"a",nil];    //array == (one,2,"2.3",a);
        //类方法 [nsarray arraywithobjects:(id),nil]
        nsarray * array1 = [nsarray arraywithobjects:@"one",@"2",@"2.3",@"a",nil];  //array == (one,2,"2.3",a);

        //次方法最后一个元素必须是nil,如果数组中间存在 nil 元素,容易导致数据丢失
        nsstring * str = nil;
        nsarray * array4 = [[nsarray alloc] initwithobjects:@"oe",@"2",str,@"t3",@"3.14", nil]; //array4 = (oe,2);

        //快速方法 @[(id)]
        nsarray * array3 = @[@"one#",@"23",@"2.3",@"a"];    //array = ("one#",23,"2.3
    2.基本类型转换成数组对象

        //数组中可以存储不同类型的对象
        int i = 10;
        float f = 3.14;
        nsnumber * number = [nsnumber numberwithint:i];
        nsnumber * number1 = [nsnumber numberwithfloat:f];
        nsarray * array = @[@"one",@"10",number,number1];   // array == (one,10,10,"3.14");

        //数组中存储的是对象的地址,数组中也可以存储数组的地址
        nsarray * array1 = @[@"1",@"2",@"3"];
        nsarray * array2 = @[array,array1];

    3.数组中自定义对象
        //创建三个对象(类以及创建)
        person * p1 = [[person alloc] initwithname:@"jack" andage:15];
        person * p2 = [[person alloc] initwithname:@"tom" andage:20];
        person * p3 = [[person alloc] initwithname:@"lucy" andage:18];
        nsarray array4 = @[p1,p2,p3];

    4.获取数组中的元素
        person * p = [array4 objectatindex:0];  //name = jack,age = 15
        person * p = array4[0]; //快速方法

    5.数组中元素个数
        nsuinteger count = [array4 count];
        nslog(@"%lu",count);

    6.判断数组中是否包含某个元素
        person * p4 = [[person alloc] initwithname:@"tom" andage:20];
        nslog(@"p2=%p,p4=%p",p2,p4);    //p2和p4的地址不相同,p4为新对象
        if ([array4 containsobject:p4]) {
            nslog(@"包含");
        } else {
            nslog(@"不包含");
        }
        //不包含,p4不在array4中,即使内容相同,但是也不包含

        nsarray * array5 = @[@"one",@"two",@"three"];
        nsstring * str2 = @"one";
        nsstring * str4 = @"one";
        nsstring * str3 = [[nsstring alloc] initwithformat:@"%@",@"two"];
        nslog(@"%p %p %p %p",str2,str3,str4,array9[0]);  //0x100002088 0x6f777435 0x100002088
        //在创建字符串的时候会判断内存是否含有相同字符串,若有相同的则不会新开辟内存去存储,只把新的字符串指针指向那个地址,若没有相同的则就会新开辟空间去存储
        //但是 str3 是重新初始化 nsstring,所以str3的地址是固定的 并不和array[1]的地址一样
        if ([array9 containsobject:str3]) {
            nslog(@"包含");
        } else {
            nslog(@"不包含");
        }
        //包含

    7.遍历数组
        nsarray * array = @[@"1",@"2",@"three",@"4"];
        //方法一
        for (int i=0; i<[array count]; i++) {
            nslog(@"array[%d]=%@",i,array[i]);
        }
        //方法二
        for (id * str in array) {
            nslog(@"%@",str);
        }

    8.数组排序(排序后放在一个新的nsarray数组中)
        nsarray * array = @[@"a",@"b",@"f",@"d",@"c"];

        //传入一个比较大小的方法 根据返回值来决定是否需要交换元素
        nsarray * array2 = [array sortedarrayusingselect:sel];
        sel sel = @selector(compare:);  //a-b-c-d-f
        sel sel2 = @selector(isgreatthan:); //a-b-c-d-f
        sel sel3 = @selector(islessthan:);  //f-d-c-b-a

        //block
        //返回值 (^名字)(参数列表)
        nsarray * array3 = [array sortedarrayusingcomparator:^nscomparisonresult(id obj1, id obj2) {
            return [obj1 compare:obj2];
        }];     //a-b-c-d-f
        nsarray * array4 = [array sortedarrayusingcomparator:^nscomparisonresult(id obj1, id obj2) {
            return [obj1 compare:obj2];
        }];     //f-d-c-b-a
2、可变数组
    1.创建可变数组
        nsarray * array = @[@"one",@"two",@"three",@"four"];
        nsmutablearray * muarr = [[nsmutablearray alloc] initwitharray:array];
        nsmutablearray * muarr2 = [nsmutablearray arraywithobjects:@"one",@"two",@"three",nil];

    2.添加元素
        nsmutablearray * muarr3 = [[nsmutablearray alloc] init];
        [muarr3 addobject:@"one"];

    3.添加其他数组的元素
        [muarr3 addobjectsfromarray:array];

    4.在指定位置插入元素
        [muarr3 insetobject:@"a" atindex:1];

    5.删除元素  会通过对象地址删除数组中所有的用同一个地址的对象
        [muarr removeobject:@"one"];    //删除数组中的所有指向"one"地址的元素

    6.通过索引方式删除对象(索引值不能数组越界)
        [muarr removeobjectatindex:0];

    7.删除所有元素
        [muarr removeallobjects];

    8.交换数组元素    //- (void)exchangeobjectatindex:(nsuinteger)idx1 withobjectatindex:(nsuinteger)idx2;
         [muarr exchangeobjectatindex:i withobjectatindex:j]
3、数组转换
    1.不可变数组到可变数组
        nsarray * array = @[@"one",@"two"];
        nsmutablearray * muarr = [[nsmutablearray alloc] initwitharray:array];  // [array mutablecopy];

    2.可变数组变成不可变数组
        [muarr copy]

    3.nsstring转换为nsarray
    //按照给定的字符串进行截取,将截取的多段字符串放入数组中
    - (nsarray *)componentsseparatedbystring:(nsstring *)separator;

   // 例:有一个字符串,通过.进行分割
  nsstring *string = @“www.lanou3g.com";
  nsarray *array = [string    componentsseparatedbystring:@"."];
 nslog(@"%@", array);
输出结果:(
    www,
    lanou3g,
    com
)

    4.nsarray转换为nsstring
   //将数组中的元素按照给定的字符串格式拼接成一个完整的字符串对象
   - (nsstring *)componentsjoinedbystring:(nsstring *)separator;
//例:有一个数组,通过&将所有元素拼接成一个字符串
nsarray *array = @[@"北京", @"大连", @"河南", @"上海", @"广州", @"西安"];
nsstring *string = [array componentsjoinedbystring:@"&"];
nslog(@"%@", string);
输出结果:北京&大连&河南&上海&广州&西安

字典

1、不可变字典
    1.创建不可变字典
        nsdictionary * dic = [[nsdictionary alloc] initwithobjectsandkeys:@"one",@"1",@"two",@"2",nil];
        //快速创建字典
        nsdictionary * dic1 = @{@"3":@"three",@"4":@"four"};

    2.字典可以存储任意类型的对象
        nsarray * array = @[@"one",@"333"];
        nsnumber * num = [nsnumber numberwithint:10];
        nsdicitonary * dic2 = @{@"dic":dic,@"num":num,@"array":array};

    3.获取字典的长度(键的个数)
        nsuinteger count = [dic2 count];

    4.从字典中取值
        nsstring * arr = [dic3 objectforkey:@"array"];
        //快速取值
        nsdictionary * dic4 = dic3[@"dic"];
        nsnumber * number = dic3[@"num"];
2、可变字典
    1.创建可变字典
    nsmutabledictionary * mudic = [[namutabledictionary alloc] initwithobjectsandkeys:@"one",@"1",nil];
    //向可变字典中添加不可变字典
    nsdictionary * dic = @{@"3":@"three"};
    nsmutabledictionary * mudic2 = [[nsmutabledictionary alloc] initwithdictionary:dic];

    2.向字典中插入数据
    [mudic2 setobject:@"two" forkey:@"2"];

    3.遍历字典
    nsarray * allkeys = [mudic2 allkeys];
    for (id key in allkeys) {
        nslog(@"%@",key);
        id obj = mudic2[key];
        nslog(@"%@",obj);
    }

    4.删除数据
    [mudic2 removeobjectforkey:@"2"];

    5.全部删除
    [mudic removeallobjects];