黑马程序员__集合NSArry,NSSet,NSDictionary的总结

------- IOS培训android培训、期待与您交流! --------


在c语言中我们有数组,可以存放多个相同数据类型的数据,在oc中也可以使用c语言中数组对象,来存放很多相同数据类型的数据,但是我们有时候会在一个数组中存放多个不同类型的数据,这个时候就要使用到NSArry了。

NSArry是不可变数组,里面只能存放OC类型的对象,不能存放非OC类型的数据。

对于NSArry的定义方式如下几种:

   NSArray *arry = [NSArray array];
    NSArray *arry2 = [NSArray arrayWithObject:@"hello"];
    Person * person = [[Person alloc] init];
    NSArray * arry3 = [NSArray arrayWithObjects:@"xiaoming",person, nil];

对于这些arry一旦定义初始化,就不可以向NSArry中添加或者删除对象了。对于NSarry中的个数,可以使用【arry count】方法来查看,其实这个是点语法,可以使用 arry.count来直接查看。

对于NSArry是有序的,所以想要查看数组对象的某一个元素,可以通过使用

 [arry3  objectAtIndex:3];或者arry3[3]来查看相应位置的对象。

快速创建NSArry对象数组的方法是NSArry * arry = @[@"xiaoming",@"2223",@"hello"];


对于NSArry的遍历,可通过像遍历数组的方式一样遍历。如下代码

  NSArray * arry3 = [NSArray arrayWithObjects:@"xiaoming",person, nil];

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

也可以通过如下的方式快速遍历arry对象

for(id obj in arry)
{
NSLog(@"%@",obj);
}

快速遍历的时候如果我们想知道正在遍历的时第几个元素,可以通过NSUinteger i = [arry indexOfObject:obj];

快速遍历的第三种方式通过使用^block

 [arry3 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        NSLog(@"%ld - %@",idx,obj);
        if(idx ==2)
            *stop = YES;
    }]

通过*stop可以控制遍历何时结束。obj为每次遍历时的arry对应的元素,idx表示现在遍历的时NSArry的第几个对象元素。


NSMutableArray是OC可变数组。NSMutableArray的定义初始化方式和NSArray的方式一样,但是NSMutableArray可以通过对象方法添加或者删除数组元素。

    [arry addObject:@"zhangsan"];可以添加对象

    [arry removeObject:@"zhangsan"];可以删除指定对象。

     [arry removeObjectAtIndex:2];可以删除指定位置的对象。

    [arry removeALlObject]可以删除arry中所有的对象元素。


注意以下方式是错误的,NSMutableArray * arry = @["zhangsan",@"123"];因为@[]方式创建的时NSArray是不可变数组,不能直接赋值给它的子类NSMutableArray。


2NSSet和NSMutableSet

与NSArray的区别是NSSet中的对象是无序的,所以对于NSSet中的每一个元素来说,没有指定顺序的遍历。

NSSet的创建和NSArray基本相似。

NSSet想要访问一个元素,只能通过方法[set anyObject];随机返回一个NSSet中的对象。

NSMutableSet的创建方式和NSSet相似,只不过对于NSSet相比它是可变的。


3NSDictionary和NSMutableDictionary

NSDictionary中存储的时键值对,有一个key对应一个value

对于NSDictionary的创建方式如下

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

也可以一次性创建多个键值对如下;

    NSArray *values =@[@"jack",@"北京"];
    NSArray *keys =@[@"name",@"addresee"];
    NSDictionary *dict2 = [NSDictionary dictionaryWithObjects:values forKeys:keys];

NSDictionary也是无序的,取值通过取对应key的值来取。使用如下方式

 id obj = [dict2 objectForKey:@"name"];

也可以通过编译器特性dict2[@"name"]方式来直接访问

字典也可以快速创建通过如下方式创建@{key1:value1,key2:value2}方式来创建,同样以这种方式创建的Dictionary不能赋值给NSMutableDictionary对象。

NSMutableDictionary与NSDictionary的区别是NSMutableDictionary是可变的,通过如下方式添加新的元素

[dict setObject:@"北京" forKey:@"address"];

NSMutableDictionary也可以删除指定的key对应的元素,通过如下方法

[dict removeObjectForKey:(@“address”)];

对于字典的遍历也是通过使用block方式来便利。可以使用如下的函数来遍历

 [dict2 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
        NSLog(@"%@ - %@",obj,key);
    }];





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值