OC:OC中的集合类-NSArray(1)
/*OC中的集合类-
NSArray 用于对象有序集合
NSSet 用于对象无序集合
NSDictionary 用于键值映射
这三种集合类是不可变的(一旦初始化后,就不能改变)
(可变集合类,这三种可变集合类是对应上面三种集合类的子类)
NSMutableArray NSMutableSet NSMutableDictionary
这些集合类只能手机Cocoa对象(NSObject对象),如果想保存一些原始的C数据(如:int,float,double,BOOL等),则需要将这些原始的C数据封装成NSNumber类型的,NSNumber对象是Cocoa对象,可以被保存在集合类中。
*/
/*
NSArray OC数组
*/
//==============================================================
//C数组:所有元素必须是相同的数据类型
int age[] = {1,2,3};
age[1]; //取数组中的元素
//把car放C数组
Car *car1 = [[Car alloc] init];
Car *cAry[3] = {car1,[Car new],[Car new]};
//==============================================================
//创建OC数组,ary1是空数组(这种方法不用)
NSArray *ary1 = [NSArray array];
//ary2初始化时有一个元素
NSArray *ary2 = [NSArray arrayWithObject:@"jereh"];
//创建有多个元素的数组
//nil不能缺省,是数组结束标志,不能作为元素存到数组里
NSArray *ary3 = [NSArray arrayWithObjects:@"h",@"e",@"kong", nil];
//快速创建数组 ,@[] 不能存nil
NSArray *ary4 = @[@"c",@"s",@"d",@"n"];
//==============================================================
//OC数组元素个数 -(unsigned) Count;
NSArray *ary5 = @[@"c",@"s",@"d",@"n"];
[ary5 count];
// ary5.count;
NSLog(@"数组元素个数:%ld",ary5.count);
//==============================================================
//访问数组元素 -(id) objectAtIndex:(unsigned int)index;//获取指定索引处的对象
NSArray *ary6 = @[@"c",@"s",@"d",@"n"];
// [ary6 objectAtIndex:0];//获得数组中某个位置的元素
NSLog(@"访问数组:%@",[ary6 objectAtIndex:0]);
NSLog(@"访问数组:%@",ary6[0]); //C数组的简便方法
//==============================================================
//1.遍历OC数组(按照顺序输出)
Car *car = [[Car alloc] init];
NSArray *ary7 = @[@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",car];
for (int i=0; i<ary7.count; i++) {
NSLog(@"遍历数组ary7:%@",ary7[i]);
}
/*2.快速遍历OC数组(快速枚举):里面的元素都是OC对象,所以都是id类型;
表示把ary7中的每个元素都赋值给obj,然后循环
缺点:不知道取出的对象在数组中的位置。
限制:不应在枚举过程中增加会删除数组中的指针
*/
int i = 1;
for (id obj in ary7) {
NSLog(@"快速遍历第%i个:%@",i,obj);
i++;
}
/*3.利用block遍历数组
block没有返回值,有三个参数,obj当前对象,idx位置,*stop是停止遍历
每遍历一个对象,block都会被调用一次
(方法参数block部分,按回车会自动生成,不用手动写)
*/
[ary7 enumerateObjectsUsingBlock:
^(id obj, NSUInteger idx, BOOL *stop) {
//BOOL *stop
if (idx>0) {
*stop = YES;
}
NSLog(@"block快速遍历 第%ld个元素:%@",idx,obj);
}
];
//==================================================================
/*其他用法
-(BOOL)containsObject:obj 确定数组中是否包含对象obj
-(id)objectAtIndex:i 存储在位置i的对象
-(NSUInteger)indexOfObject:obj 第一个包含obj元素对的索引号
/*
NSMutableArray OC可变数组
是NSArray的子类,类似NSArray,但是可以增加或删除指针。
*/
//=========================================================
//创建空数组
NSMutableArray *ary1 = [NSMutableArray array];
//添加元素
[ary1 addObject:@"a"];
[ary1 addObject:@"d"];
NSLog(@"ary1 %@",ary1);
//添加多个元素
NSMutableArray *ary2 = [NSMutableArray array];
[ary2 addObjectsFromArray:ary1];
NSLog(@"ary2 %@",ary2);
//=========================================================
//删除元素
NSMutableArray *ary3 = [NSMutableArray arrayWithObjects:@"a",@"b",@"c",@"d", nil];
//按照索引位置删除元素
[ary3 removeObjectAtIndex:0];
NSLog(@"ary3 %@",ary3);
//删除指定元素
[ary3 removeObject:@"b"];
NSLog(@"ary3 %@",ary3);
//删除全部元素
[ary3 removeAllObjects];
//删除最后一个元素
[ary3 removeLastObject];
NSMutableArray *ary4 = [NSMutableArray arrayWithObjects:@"a",@"b",@"c",@"d", nil];
//在指定的范围内找到特定的元素进行删除
[ary4 removeObject:@"b" inRange:NSMakeRange(0, 2)];
NSLog(@"ary4 %@",ary4);
//删除某个范围内的元素
NSMutableArray *ary5 = [NSMutableArray arrayWithObjects:@"a",@"b",@"c",@"d", nil];
[ary5 removeObjectsInRange:NSMakeRange(0, 3)];
NSLog(@"ary5 %@",ary5);
//删除了同时存在后面数组中的元素
NSMutableArray *ary6 = [NSMutableArray arrayWithObjects:@"a",@"b",@"c",@"d", nil];
NSArray *dAry = @[@"d"];
[ary6 removeObjectsInArray:dAry];
NSLog(@"ary6 %@",ary6);
//=========================================================
// NSArray
NSArray *ary7 = @[@"aa",@"bb"];
//添加另一个数组中的全部元素到当前数组(重新设置数组元素,原来的元素被删掉了)
NSMutableArray *ary8 = [NSMutableArray arrayWithObjects:@"a",@"b",@"c",@"d",@"e",@"f", nil];
[ary8 setArray:ary7];
NSLog(@"ary8 %@",ary8);
//添加多个元素(在原数组的末尾添加新数组元素)
NSMutableArray *ary9 = [NSMutableArray arrayWithObjects:@"a",@"b",@"c",@"d",@"e",@"f", nil];
[ary9 addObjectsFromArray:ary7];
NSLog(@"ary9 %@",ary9);
//在索引位置添加一个元素
[ary9 insertObject:@"jereh" atIndex:1];
NSLog(@"ary9 %@",ary9);
//=========================================================
//替换
NSMutableArray *ary10 = [NSMutableArray arrayWithObjects:@"a",@"b",@"c",@"d",@"e",@"f", nil];
[ary10 replaceObjectAtIndex:2 withObject:@"apple"];
NSLog(@"ary10 %@",ary10);
//用新的数组替换当前数组中某个范围的元素
[ary10 replaceObjectsInRange:NSMakeRange(0, 3) withObjectsFromArray:@[@"Hello"]];
NSLog(@"ary10 %@",ary10);
//交换当前数组中某两个索引位置的元素
[ary10 exchangeObjectAtIndex:0 withObjectAtIndex:2];
NSLog(@"ary10 %@",ary10);
//=========================================================
//网址解析
NSString *str = @"http://www.baidu.com:/agsdha";
NSArray *ary11 = [str componentsSeparatedByString:@"//"];
// NSString *str1 = ary11[1];
NSArray *ary12 = [ary11[1] componentsSeparatedByString:@":"];
NSArray *ary13 = [[ary11 lastObject] componentsSeparatedByString:@":"];//用lastObject取最后一个元素
NSLog(@"ary11 %@",ary11);
NSLog(@"ary12 %@",ary12);
NSLog(@"ary13 %@",ary13);
NSLog(@" %@",ary12[0]);
//给数组分配容量
NSMutableArray *array = [NSMutableArray arrayWithCapacity:20];