黑马程序员——Objective-c——Foundation集合

本文详细介绍了Objective-C中的几种集合类,包括NSArray、NSMutableArray、NSSet、NSMutableSet、NSDictionary及NSMutableDictionary的使用方法与特点。通过实例展示了数组、集合和字典的基本操作与遍历技巧,并对比了它们之间的异同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


NSArray/NSMutableArray

 

类比 int ages[10]= {23,43,45,56};

    Person *p=[[Person alloc] init];

    Person *person[5]= {p,[[Person alloc]init]};

 

//OC数组不能存放nil

//OC数组只能存放OC对象,不能存放非OC对象类型,如(int,struct,enum...)

//NSArray *array=[NSArray array]; // 这个array永远是空数组,此类方法用于NSMutableString

NSArray *array2 = [NSArray arrayWithObject:@"jack"];

NSArray *array3 = [NSArray arrayWithObjects:@"jack",@"rose",nil];

NSArray *array4 = @[@"jack",@"rose"]; // Xcode特性,翻译成面的那一句话 只返回NSArray  NSMutableArray *array5 = @[@"jack",@"rose"];错误写法

NSLog(@"%@",array3.count); // 打印为,计算数组的长度

NSLog(@"%@",[array3 objectAtIndex:1]);// 打印rose,OC数组array3下标为1的元素

NSlog(@"%@",array3[1]); // Xcode特性 翻译成上面的那一句话

 

OC数组遍历

 Person *p = [[Person alloc]init];

    NSArray *array=@[p,@"jack",@"rose"];

    

    1for(int i=0;i<array.count;i++)

    {

        NSLog(@"%@",array[i]);

    }

    

    2

    int i=0;

    for(id obj in array)

    {

        NSUInteger i=[array indexOfObject:obj];

        NSLog(@"%@",array[i]);

        i++;

        if(i==0) break; // 下标为0,跳出遍历

    }

    

    3

    [array enumerateObjectsUsingBlock:

    ^(id obj,NSUInteger idx,BOOL *stop)

    {

        NSLog(@"%ld--%@",idx,obj);

        if(idx==1) *stop=YES;   // 下标为1,跳出遍历

    }];

    

    扩展:

    3内部的解析:

    for(int i=0;i<array.count;i++)

    {

    BOOL isStop=NO;id obj=array[i];

    myBlock(obj,i,&isStop); // myBlock的代码块定义如方法3中的代码块

    if(isStop) break;

    }

    //每遍历一次就调用一次block并且把当前元素和索引位置当做参数传给block

    

NSSet/NSMutableSet

 

基本用法

NSSet *s1 = [NSSet setWithObjects:@"jack1",@"jack2",@"jack3",@"jack4",nil];

NSString *str = [s1 anyObject]; // 随机取出一个元素

NSLog(@"%@",str);

 

NSMutableSet *s2 = [NSMutableSet set];

[s2 addObject:@"hack"]; // 添加元素

 

NSSetNSArray对比

 

共同点:

 *都是集合,都能存放多个OC对象

 *只能存放OC对象,不能存放非OC对象类型(基本数据类型:intcharfloatstructenum...)

 *本身长度都不可变,有一个可变的子类

 

不同点:

NSArray有序,NSSet无序

 

NSDictionary / NSmutableDictionary

 

 

   // NSDictionary *dict1 = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];

 

    //NSArray *keys = @[@"name",@"address"];

   // NSArray *objects = @[@"jack",@"北京"];

   // NSDictionary *dict2 = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

 

    //NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:

    //                                        @"jack",@"name",

    //                                        @"北京",@"address",nil];

 

 

   NSDictionary *dict4 = @{@"name":@"jack",@"address":@"北京"};

    //id obj1 = [dict4 objectForKey:@"name"];

    id obj2 = dict4[@"name"];

NSLog(@"%@",obj2);

 

两种遍历方式

    //NSArray *keys2 = [dict4 allKeys];

   //for(int i=0; i<dict4.count; i++)

    //{

    //NSString *key = keys2[i];

    //   NSString *obj = dict4[key];

    //   NSLog(@"%@---%@",key,obj);

    //}

 

    [dict4 enumerateKeysAndObjectsUsingBlock:

    ^(id key , id obj , BOOL *stop)

    {

        NSLog(@"%@---%@",key,obj);

    }];

 

以上打//的方法表示不推荐的方法



------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值