NSArray不可存放基本数据类型,只能存放类的实例,如果需要将基本数据类型、结构体放入到数组的话,需要通过NSNumber、NSValue进行数据封装,同时不能在NSArray中存储nil
NSString *str1 = @"zhangsan";
NSString *str2 = @"lisi";
NSString *str3 = @"wangwu";
NSArray *array1 = [[NSArray alloc] initWithObjects:str1,str2,str3,nul];
//打印的时候调用的是description方法,相当于 array1.description
NSLog(@"%@",array1);
initWithObjects方法最后一个值为nil,nil是空指针的意思,和Java中的null一样,为什么创建NSArray的时候最后一个值为空?
这个是和C语言场景类似,C语言中,字符串结尾符为‘/0’,那么这个地方NSArray最后一个元素nil则是标记NSArray结束。
description方法和Java中的toString仿发一样,我们也可以重写这个方法。
NSArray *array2 = [NSArray arrayWithArray:array1];
使用下标访问元素
NSString *str1 = [array1 objectAtIndex:0];
获取数组的大小,返回的是一个无符号数组
NSUInteger count = [array1 count];
是否包含某一个元素,判断的是指针对象,不是对象中的值
BOOL isContains = [array1 containsObject:@"zhangsan"];
找到一个元素在数组中的下标
NSUInteger index = [array1 indexOfObject:@"zhangsan"];
if(index == NSNotFound){
//没有找到
}else{
//找到了
}
NSNotFound是系统常量,定义为Long类型的最大值
使用指定的连接符连接数组中的所有元素,只有数组中的元素是字符串时,才可以用
NSString *content = [array1 componentsJoinedByString:@";"];
在数组尾部增加一个元素,需要返回一个新的数组,因为原数组是不可变的
NSArray *array3 = [array1 arrayByAddingObject;@"zhaoliu"];
数组的遍历,第二种方法和Java中的快速遍历一样
for(int i = 0;i<array1.count;i++){
NSString *str = [array objectAtIndex:i];
}
for(NSString *str in array1){
}
Xcode4.4之后新增了款速创建NSArray的方式,这种方法快且方便,可以直接用下标去获取元素
NSArray *array5 = @[str1,str2,str3];
NSString *s = array5[0];
NSMutableArray类
NString是不可变的,NSMutalbeArray是可变的,可变类的属性就是可以进行增删改查的操作
NSDictionary
和Java中Map类很像,OC中叫字典由键值对key-value构成的数据集合,字典是无序的,Java中的Map也是无序的,通过hash值去索引
创建方法
NSArray *array1 = [NSArray arrayWithObjects:@"zhangsan",@"zhangwang",nil];
NSArray *array2 = [NSArray arrayWithObjects:@"lisi",@"lihaha",nil];
NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:array1,@"zhang",array2,@"li",nul];
NSDictionary类基于NSArray的,其他的和Java中的Map差不多,一般都是key-value的形式,
添加元素
NSDictionary *dict2 = [NSDictionary dictionaryWithObject:array1 forKey:@"zhang"];
获取所有元素的key
NSArray *allKeys = [dict allKeys];
获取所有元素的Value,可能为二位数组
NSArray *allValues = [dict allValues];
通过key获取value
NSArray *values = [dict objectForKey:@"zhang"];
NSDictionary的快速创建方式和访问方式
NSDictionary *dict3 = @{@"zhangsan":array1,@"lisi":array2};
NSArray *array4 = dict3["zhang"];
NSMutableDictionary 可变字典
创建可变字典、添加元素,可以指定其大小,当容量满的之后,会自动扩容
NSMutalbeDictionary *md1 = [NSMutableDictionary alloc] initWithCapacity:3];
NSArray *array1 = [[NSArray alloc] initWithObjects:@"zhangsan",@"lisi",nil];
//--------添加元素---------
[md1 setObject:array1 forKey:@"zhang"];
NSMutableDictionary *md2 = [[NSMutableDictionary alloc]initWithCapacity:3];
[md2 addEntriesFromDictionary:md1];
删除元素
[md1 removeObjectForKey:@"zhang"];//以key删除
[md1 removeAllObjects];//删除所有元素
[md1 removeObjectsForKeys:array1];//以value删除
遍历字典
//快速遍历
for(NSString *key in md1){
NSAarray *values = [md1 objectForKey:Key];
for(NSString *v in values){
}
}
//普通遍历
NSArray *allkey = [md1 allkeys];
for(int i=0;i<allKey.count;i++){
NSArray *value = [md1 objectForKey:allKey[i]];
}
NSSet&NSMutableSet
用法和NSArray非常相似,NSArray的区别在于NSSet对象不能放重复数据,并且也是无序的。