------- 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"];
NSMutableDictionary与NSDictionary的区别是NSMutableDictionary是可变的,通过如下方式添加新的元素
[dict setObject:@"北京" forKey:@"address"];
NSMutableDictionary也可以删除指定的key对应的元素,通过如下方法
[dict removeObjectForKey:(@“address”)];
对于字典的遍历也是通过使用block方式来便利。可以使用如下的函数来遍历
[dict2 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
NSLog(@"%@ - %@",obj,key);
}];