黑马程序员_Foundation框架03_集合类

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

集合类:NSArray、NSSet、NSDictionary

一、NSArray

1、概念

OC数组,只能装OC对象类型,基本类型不能装

比C语言数组的好处:C语言只能装同一类型,OC可以随便来

2、子类

NSMutableArray:可变数组,父类NSArray为不可变数组

3、使用方法

1>创建(不能放基本数据类型,不能放nil)

①调用类方法:

NSArray *array1 = [NSArray array]; // 因为是不可变数组,如果这样创建就永远是个空数组了

NSArray *array3 = @[@"Demon1", @"Demon2"];


②快速创建(编译器特性):

[NSArray arrayWithObjects:@"Demon1", @"Demon2", nil]; // nil为数组结束标志,在数组里不能存放nil值

2>数组访问方式

①调用类方法:

[array2 objectAtIndex:1];

②快速访问(编译器特性):

array2[1]; // 利用数组名和下标(常用)

3>元素个数

[array count]; // 返回元素个数

array.count; // 跟[array count];一样

4>遍历方法

①最普通for循环,通过定义变量i来逐个访问

②使用array的obj

for(id obj in array) // obj代表数组中的每一个元素
{
    NSInteger i = [array indexOfObject:obj]; // 返回当前数组元素的下标
    NSLog(@"%ld - %@", obj);}
}

③block(推荐方式:不用自己加下标,而且不用自己取参数)

每遍历一个元素调用一次block,当前元素和索引位置会当做参数传给block

*stop相当于break

[array enumerateObjectsUsingBolck:
^(id obj, NSInteger idx, BOOL *stop)
{ 
    NSLog(@"%ld - %@", idx, obj);
    if(idx == 1)
    {
        *stop = YES;
    }
}];

4、NSMutableArray

1>继承父类所有方法

2>特有方法

①添加方法

NSMutableArray *array2 = [NSMutableArray array];

[array2 addObject:@"Demon1", @"Demon2"];

②删除方法

[array removeObjectAtIndex:1];

[array removeObject:@"Demon1"];

5、注意点

1>用快速创建方式创建数组,返回对象类型是NSArray


二、NSSet

1、概念

可以理解为一个无序的数组

2、子类

NSMutableSet

3、使用方法

1>创建(不能放基本数据类型,不能放nil)

NSSet *s = [NSSet set]; // 因为是不可变,如果这样创建就永远是个空了

NSSet *s2 = [NSSet setWithObjects:@"DEMON1","DEMON2", nil];

2>元素个数

[s2 count]; // 返回元素个数

s2.count; // 跟[s2 count];一样

3>访问集合

因为无序,所以只能随机返回对象

NSString *str = [s2 anyObject];

4、NSMutableSet

1>继承父类所有方法

2>特有方法

①添加方法
NSMutableSet *s3 = [NSMutableSet s3];

[s3 addObject:@"Demon1", @"Demon2"];

②删除方法(因为无序,所以不能按下标删除)

[array removeObject:@"Demon1"];

三、NSDictionary

1、概念

存放键值对的字典,根据key可以找到value

2、子类

NSMutableDictionary:可变字典,父类NSDictionary为不可变字典

3、使用方法

1>创建

①调用类方法:key索引,value值

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


②使用数组存放

NSArray *keys = @[@"name", @"address"];NSArray *objects = @[@"Demon", @"beijing"];

NSDictionary *dict2 = [NSDitonary dictionaryWithObjects:Objects forKeys:keys];

③一个object跟一个key,中间逗号隔开(不易看清)

NSDictionary *dict3 = [NSDitonary dictionaryWithObjectsAndKeys:
@"Demon1", @"name",
@"beijing", @"address",
@"1233454", @"Phone",nil];

④快速创建(编译器特性)key : value, key2 : value2

NSDictionary dict4 = @{@"name" : @"Demon1", @"address" : @"beijing"};

2>  元素访问

①调用类方法:根据key索引查找value值

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

②快速查找(编译器特性)

id obj2 = dict[@"name"];

3>元素个数(返回的是键值对的个数)

[dict count]; // 返回键值对数

dict.count; // 跟[dict count];一样

4>遍历

①for循环

// 先取出所有的key 
NSArray *keys = [dict allkeys]; 

for(int i = 0; i < dict.count; i++)
{ 
    NSString *key = keys[i];
    NSString *object = dict[key];
    NSLog("%@ - %@", key, object);
}

②block(参数的意思和数组的差不多,不赘述了)

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

4、NSMutableDictionary

1>继承父类所有方法

2>特有方法

①添加方法(添加无先后顺序之分)

如果同样的key再赋值,会覆盖原值,key不能相同,value可以相同

NSMutableDictionary *dict = [NSMutableDictionary dictionary];

[dict setObject:@"Demon" forKey:@"name"];

②删除方法

[dict removeObjectforKey:@"name"];


5、注意点

1>用快速创建方式创建字典,返回对象类型是父类NSDictionary,不可变!


四、总结

1、NSArray、NSMutableArray

1>有序

2>快速创建(不可变):@[obj1, obj2, obj3, nil];

3>快速访问:数组名[i];

2、NSSet、NSMutableSet

1>无序

3、NSDictionary、NSMutableDictionary

1>无序

2>快速创建(不可变):@{key1 : value2, key2 : value2, key3 : value3};

3>快速访问:字典名[key];



---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值