OC 5 NSArray 数组 NSDictionary 字典 NSSet集
来源:互联网 发布:it狂人 360云盘 编辑:程序博客网 时间:2024/06/05 18:09
1.oc中常用的容器: 1.NSArray 数组2.NSDictionary 字典 3.NSSet集
2.NSArray数组:继承自NSObject 是不可变的,用于管理一系列对象的一个有序的集合。注意:数组只能存放对象类型
3.创建一个数组对象
(1)创建的是一个空数组
虽然数组中存储的内容不可修改,但是数组指针是可以重指向的
NSArray*arr = [[NSArrayalloc]init];
NSArray *arr1 = [NSArrayarray];
NSArray *arr1 = [NSArrayarray];
NSLog(@"arr =%@arr1 = %@",arr,arr1);//打印数组的标记是一对小括号
(2)创建拥有对象的数组
nil是一个数组定义结束的标准,数组中只能装对象,数组中打汉字是打不出来的,只能打出\u;想打出汉字,单独打印数组中的元素,如果是中文的可以正常输出,如果打印的是数组对象,是不能把数组中存储的中文正常输出的
NSArray*arr2 = [[NSArrayalloc]initWithObjects:@"张宇",@"2",@"3",nil];
NSLog(@"%@",arr2);
NSLog(@"%@",arr2);
NSLog(@"%@",arr2[0]);
(3)使用便利构造器创建数组
NSArray*arr3 = [NSArrayarrayWithObjects:@"zuoZhu",@"xiaoYing",@"MingRen",@"chuTian",nil];
NSLog(@"%@",arr3);
NSLog(@"%@",arr3);
(4)用一个已经存在的数组,初始化另一个数组
NSArray*arr4 = [[NSArrayalloc]initWithArray:arr3];
NSLog(@"==%@",arr4);
NSArray *arr5 = [NSArray arrayWithArray:arr4];
NSLog(@"===%@",arr5);
NSLog(@"==%@",arr4);
NSArray *arr5 = [NSArray arrayWithArray:arr4];
NSLog(@"===%@",arr5);
(5)如何访问数组中的元素
获取数组元素的个数
NSUIntegercount = [arr5 count];
NSLog(@"%lu",count);
NSLog(@"%lu",count);
(6)根据下标获取数组中对应的元素
NSLog(@"%@",arr5[0]);
(7)访问数组中的第一个元素
NSLog(@"%@",[arr5firstObject]);
(8)访问数组中的最后一个元素
NSLog(@"%@",[arr5lastObject]);
(9)返回给定位置得对象
idobject = [arr5 objectAtIndex:2];如果你不知道数组中存放的是什么类型对象使用id类型的对象区接收
NSLog(@"%@",object);
NSString *object3 =object;可以将id类型对象转换为想要的类型
NSString*object2 =[arr5 objectAtIndex:1];如果知道数组中存放的是什么类型对象,最好就是用哪个类型的对象区接收
NSLog(@"%@",object);
(10)NSMutableArray 继承NSArray是一组能够改变元素的数组
创建可变数组对象
NSMutableArray*mArr = [[NSMutableArrayalloc]initWithCapacity:0];
NSMutableArray *marr1 = [NSMutableArrayarrayWithCapacity:0];
NSMutableArray *marr1 = [NSMutableArrayarrayWithCapacity:0];
NSLog(@"marr=%@marr1%@",mArr,marr1);
(11)向可变数组添加元素
[marr1addObject:@"songxiaobao"];
[marr1 addObject:@"zhaosi"];
[marr1 addObject:@"xiaoshenyang"];
NSLog(@"%@",marr1);
[marr1 addObject:@"zhaosi"];
[marr1 addObject:@"xiaoshenyang"];
NSLog(@"%@",marr1);
(12)添加多个数组
NSArray*arr6 = [NSArrayarrayWithObjects:@"chengxuyuan",@"shejishi",@"changpingou",@"yunyingshi",@"kefuniu",@"zongjingli",nil];
NSMutableArray *marr2 = [NSMutableArrayarrayWithCapacity:0];
(13)一个数组向可变数组中添加元素
[marr2addObjectsFromArray:arr6];
NSLog(@"%@",marr2);
NSMutableArray *mArr3 = [NSMutableArrayarrayWithCapacity:0];
mArr3 = [NSMutableArrayarrayWithObjects:@"zhangyu",@"xiaopang",nil];
NSLog(@"%@",mArr3);
NSLog(@"%@",marr2);
NSMutableArray *mArr3 = [NSMutableArrayarrayWithCapacity:0];
mArr3 = [NSMutableArrayarrayWithObjects:@"zhangyu",@"xiaopang",nil];
NSLog(@"%@",mArr3);
(14)向某个位置插入一个元素
[mArr3insertObject:@"siyuan"atIndex:1];
NSLog(@"%@",mArr3);
(15)交换两个位置的元素
[mArr3exchangeObjectAtIndex:0withObjectAtIndex:2];
NSLog(@"%@",mArr3);
//
NSMutableArray *mArr4 = [[NSMutableArrayalloc]initWithObjects:@"shibo",@"zhangqiang",@"zhangyu",@"lanlan",@"lanlan",nil];
NSLog(@"%@",mArr3);
//
NSMutableArray *mArr4 = [[NSMutableArrayalloc]initWithObjects:@"shibo",@"zhangqiang",@"zhangyu",@"lanlan",@"lanlan",nil];
(16)删除指定的对象
[mArr4 removeObject:@"lanlan"];
NSLog(@"%@",mArr4);
(17)删除给定下标的元素
[mArr4 removeObjectAtIndex:0];
NSLog(@"%@",mArr4);
(18)删除数组中最后一个元素
[mArr4 removeLastObject];
NSLog(@"%@",mArr4);
(19)删除数组中所有的元素
[mArr4 removeAllObjects];
NSLog(@"%@",mArr4);
NSMutableArray*mArr5 = [NSMutableArrayarrayWithObjects:@"zhangyu",@"xibo",@"gaofei",@"zhaoyonghong",nil];
NSUInteger count1 = [mArr5 count];
(20)遍历这个数组
for(int i =0; i < count1; i++) {
// NSString *string1 = mArr5[i];
NSLog(@"%@",mArr5[i]);
}
// NSString *string1 = mArr5[i];
NSLog(@"%@",mArr5[i]);
}
(21)快速枚举forin
for(集合中的对象类型 in 集合的类型){
循环体
}
(22)oc中提供的快速枚举遍历集合时不需要在关心集合中元素的个数,集合的个数有方法做内部处理
每一次循环都把找到的元素赋值给我们提供的变量(比如:NSString *string)
此时,就可以在循环体内对找到对象做一些处理(比如:打印)
注意:在快速枚举的过程中,不能对数组做任何处理(比如:删除)
for(NSString*string in mArr5) {
// [mArr5 removeLastObject];不能添加,这样是错误的!!!!!
NSLog(@"===%@",string);
}
// [mArr5 removeLastObject];不能添加,这样是错误的!!!!!
NSLog(@"===%@",string);
}
//创建四个人得对象
Person *p = [Person personWithName:@"changlaoshi"sex:@"woman"];
Person *p1 = [Person personWithName:@"jizemingmu"sex:@"yao"];
Person *p2 = [Person personWithName:@"tianhaiyi"sex:@"man"];
Person *p3 = [Person personWithName:@"chenguanxi"sex:@"shen"];
//将人得对象添加到数组中
NSMutableArray *pArr = [NSMutableArrayarrayWithObjects:p,p1,p2,p3,nil];
for (Person *p in pArr) {
NSLog(@"%@",p);
}
Person *p = [Person personWithName:@"changlaoshi"sex:@"woman"];
Person *p1 = [Person personWithName:@"jizemingmu"sex:@"yao"];
Person *p2 = [Person personWithName:@"tianhaiyi"sex:@"man"];
Person *p3 = [Person personWithName:@"chenguanxi"sex:@"shen"];
//将人得对象添加到数组中
NSMutableArray *pArr = [NSMutableArrayarrayWithObjects:p,p1,p2,p3,nil];
for (Person *p in pArr) {
NSLog(@"%@",p);
}
(23)数组中的排序
NSMutableArray*mArr6 = [NSMutableArrayarrayWithObjects:@"zhangyu",@"xibo",@"gaofei",@"zhaoyonghong",nil];
以前的方法
NSUInteger count2 = [mArr6 count];
for (int i = 0; i < count2-1; i++) {
for (int j = 0; j<count2-i-1; j++) {
if ([mArr6[j] compare:mArr6[j+1] ]== NSOrderedDescending) {
[mArr6 exchangeObjectAtIndex:j withObjectAtIndex:j+1]; }
}
}
for (NSString *string in mArr6) {
NSLog(@"%@",string);
for (int i = 0; i < count2-1; i++) {
for (int j = 0; j<count2-i-1; j++) {
if ([mArr6[j] compare:mArr6[j+1] ]== NSOrderedDescending) {
[mArr6 exchangeObjectAtIndex:j withObjectAtIndex:j+1]; }
}
}
for (NSString *string in mArr6) {
NSLog(@"%@",string);
}
OC中数组排序
sel =@selector他是一个方法选择器@selector()小括号中只需要提供比较元素大小的方法就可以了
//sortedArrayUsingSelector返回的是一个升序的数组
//sortedArrayUsingSelector返回的是一个升序的数组
NSArray*sortArray = [mArr6 sortedArrayUsingSelector:(@selector(compare:))];
for (NSString *string in sortArray) {
NSLog(@"%@",string);
}
for (NSString *string in sortArray) {
NSLog(@"%@",string);
}
4.字典NSDictionary继承的NSObject,是一个不可变的字典,字典中存储的元素,都是以键值(key - -value)对形式出现,并且key值是唯一的,不能重复
a.字典中只能存放对象类型的数组,且字典中存放的键值对是无序的
b.存放数据的形式:key:value1,key:value2....
c.key=键 value = 值 俗称键值对
d.key是唯一的,但是value是可以有多个的
(1)创建一个空字典
NSDictionary*dict =[[NSDictionaryalloc]init];
//打印字典的标准时一对大括号{}
NSLog(@"%@",dict);
//打印字典的标准时一对大括号{}
NSLog(@"%@",dict);
(2)创建一个字典
NSDictionary*dict1 =[[NSDictionaryalloc]initWithObjectsAndKeys:@"zhangsan",@"name",@"yao",@"sex",@"38",@"age",nil];
NSLog(@"%@",dict1);
注意事项:
a.创建时value在前,key在后
b.字典是无序的
c.字典在创建的时候也是nil
d.key一般是字符串,value必须是对象
NSDictionary*dict2 = [[NSDictionaryalloc]initWithObjectsAndKeys:@"bear",@"baidu",@"qq",@"tengxun",@"dog",@"jingdong",nil];
NSLog(@"%@",dict2);
NSDictionary *m =[NSDictionary dictionaryWithObjectsAndKeys:@"bear",@"baidu",@"qq",@"tengxun",@"dog",@"jingdong",nil];
NSLog(@"%@",m);
NSLog(@"%@",dict2);
NSDictionary *m =[NSDictionary dictionaryWithObjectsAndKeys:@"bear",@"baidu",@"qq",@"tengxun",@"dog",@"jingdong",nil];
NSLog(@"%@",m);
(3)字典的访问
获取字典中所有的key值
NSArray*kArr = [dict2 allKeys];
NSLog(@"%@",kArr);
(4)获取字典中所有的value
NSArray*vArr = [dict2 allValues];
NSLog(@"%@",vArr);
(5)获取字典中的键值个数
NSUIntegercount3 = [dict2 count];
NSLog(@"%lu",count3);
NSLog(@"%lu",count3);
(6)根据key返回value值
NSString *sValue = [dict2 objectForKey:@"baidu"];
NSLog(@"%@",sValue);
(7)遍历字典的键值对
方法一
for(inti = 0; i < count3; i++) {
//key值的个数和键值对的个数是一致的
//[dict2 allKeys]返回存放所有key的数组
NSString *key = [[dict2 allKeys]objectAtIndex:i];
NSString *value = [dict2 objectForKey:key];
NSLog(@"%@ = %@",key,value);
//key值的个数和键值对的个数是一致的
//[dict2 allKeys]返回存放所有key的数组
NSString *key = [[dict2 allKeys]objectAtIndex:i];
NSString *value = [dict2 objectForKey:key];
NSLog(@"%@ = %@",key,value);
}
方法二
for(NSString*key in [dict2 allKeys]) {
//根据key值拿到value值
NSString *value = [dict2 valueForKey:key];
NSLog(@"%@ = %@",key,value);
}
//根据key值拿到value值
NSString *value = [dict2 valueForKey:key];
NSLog(@"%@ = %@",key,value);
}
方法三
//使用快速枚举遍历字典,默认辨认是key值
for (NSString *key in dict2) {
NSString *value = [dict2 objectForKey:key];
NSLog(@"%@ == %@",key,value);
}
for (NSString *key in dict2) {
NSString *value = [dict2 objectForKey:key];
NSLog(@"%@ == %@",key,value);
}
5.可变字典NSMutableDictionary 继承的NSDictionary,管理的是可变字典
NSMutableDictionary*mDict =[[NSMutableDictionaryalloc]initWithCapacity:0];
[mDict setObject:@"luyang"forKey:@"H"];
[mDict setObject:@"zhangyu"forKey:@"Z"];
//改
[mDict setObject:@"ziqian"forKey:@"Z"];//setObject:forkey:这个方法,如果发现字典中没有对应的key值,此时向字典中添加一对键值;如果字典中有对应的key值,此时,就修改key值对应的value值
NSLog(@"%@",mDict);
[mDict setObject:@"luyang"forKey:@"H"];
[mDict setObject:@"zhangyu"forKey:@"Z"];
//改
[mDict setObject:@"ziqian"forKey:@"Z"];//setObject:forkey:这个方法,如果发现字典中没有对应的key值,此时向字典中添加一对键值;如果字典中有对应的key值,此时,就修改key值对应的value值
NSLog(@"%@",mDict);
(1)根据key值删除键值对
[mDict removeObjectForKey:@"Z"];
NSLog(@"%@",mDict);
(2)清空字典
[mDict removeAllObjects];
NSLog(@"%@",mDict);
(3) NSArray *grop1 = [NSArray arrayWithObjects:@"xiaohua",@"xiaoming",@"xiaokang",nil];
NSArray *grop2 = [NSArray arrayWithObjects:@"zhangyu",@"xiaopang",@"gaofei",nil];
NSArray *grop3 = [NSArray arrayWithObjects:@"zhongguo",@"meiguo",@"chaoxian",nil];
NSMutableDictionary*gropDic = [NSMutableDictionarydictionaryWithCapacity:3];
//数组作为key值对应value值
[gropDic setValue:grop1forKey:@"1"];
[gropDic setValue:grop2forKey:@"2"];
[gropDic setValue:grop3forKey:@"3"];
NSArray *grop2 = [NSArray arrayWithObjects:@"zhangyu",@"xiaopang",@"gaofei",nil];
NSArray *grop3 = [NSArray arrayWithObjects:@"zhongguo",@"meiguo",@"chaoxian",nil];
NSMutableDictionary*gropDic = [NSMutableDictionarydictionaryWithCapacity:3];
//数组作为key值对应value值
[gropDic setValue:grop1forKey:@"1"];
[gropDic setValue:grop2forKey:@"2"];
[gropDic setValue:grop3forKey:@"3"];
NSLog(@"%@",gropDic);
6.NSSet 不可变的集合类,继承NSObject用于解决类似于数学中集合的问题;
注意:集合中的元素是唯一的 集合中的元素是无序的 集合中只能存放对象类型数据
(1)创建一个空集合
NSSet*set = [[NSSetalloc]init];
NSLog(@"%@",set);
NSSet *set1 = [[NSSet alloc]initWithObjects:@"1",@"2",@"1",@"3",@"4",@"5",nil];
NSLog(@"%@",set1);
NSLog(@"%@",set);
NSSet *set1 = [[NSSet alloc]initWithObjects:@"1",@"2",@"1",@"3",@"4",@"5",nil];
NSLog(@"%@",set1);
(2)使用数组初始化集合
NSArray*sArr = [NSArrayarrayWithObjects:@"1",@"2",@"2",@"1",@"3",@"4",@"5",nil];
(3)使用数组初始化集合 把数组转为集合,可以吧数组中重复的元素除掉
NSSet*set2 = [[NSSetalloc]initWithArray:sArr];
NSLog(@"%@",set2);
(4)访问集合中元素的个数
NSUIntegercount4 = [set2 count];
NSLog(@"%lu",count4);
(5)随机访问集合中元素
NSString*sObject = [set2 anyObject];
NSLog(@"%@",sObject);
(6)判断集合中是否包含某个对象
BOOL isContain = [set2containsObject:@"0"];
NSLog(@"%@",isContain ?@"包含": @"不包含");
NSLog(@"%@",isContain ?@"包含": @"不包含");
(7)判断一个集合是否是另一个集合的子集
NSSet*set3 = [NSSetsetWithObjects:@"1",@"2",@"3",nil];
NSSet*set4 = [NSSetsetWithObjects:@"1",@"2",@"3",nil];
BOOLisTrue =[set4 isSubsetOfSet:set3];
NSLog(@"%@",isTrue ? @"是它的子集": @"不是它的子集");
(8)判断两个集合是否有交集
isTrue = [set3intersectsSet:set4];
NSLog(@"%@",isTrue ? @"有交集": @"没有交集");
(9)判断两个集合是否相等
isTrue = [set3isEqualToSet:set4];
NSLog(@"%@",isTrue ?@"相等": @"不相等");
7. 可变集合 NSMutableSet
NSMutableSet*mSet =[[NSMutableSetalloc]initWithCapacity:0];
NSMutableSet*mSet1 =[NSMutableSet setWithCapacity:0];
(1)添加元素
[mSetaddObject:@"1"];
[mSet addObject:@"2"];
NSLog(@"%@",mSet);
[mSet addObject:@"2"];
NSLog(@"%@",mSet);
(2)删除元素
[mSet removeObject:@"1"];
NSLog(@"%@",mSet);
NSLog(@"%@",mSet);
(3)删除集合中所有的元素
[mSet removeAllObjects];
NSLog(@"%@",mSet);
总结: 1.NSArray数组 2.NSDictionary 字典 3.NSSet集
1.NSArray是有序的,NSDictionary,NSSet是无序的
2.NSArray能通过下标访问,NSDictionary通过key类访问元素 NSSte随机访问
3.NSArray的元素可以重复,NSDictionary中的key值必须唯一,NSSet元素也是唯一的
4.显示格式:
NSArray:(元素1,元素2.....)
NSDictionary :{key1 = value1;key2 =value2}
NSSet:{(元素1,元素2.........)}
NSSet:{(元素1,元素2.........)}
注意:NSArray和NSDictionary经常嵌套使用
8. NSNumber继承NSvalue是一个数字类,主要作用是讲基本数据类型转换为对象类型,也能就将对象类型转换为基本数据类型
//将int数据类型转换成NSNumber对象
NSNumber *intNumber = [NSNumbernumberWithInt:100];
NSLog(@"%@",intNumber);
//
int a = [intNumber intValue];
NSLog(@"%i",a);//%i也是int类型的占位符
//3.14
NSNumber *floatNumber =[NSNumbernumberWithFloat:3.14];
NSLog(@"%@",floatNumber);
float f = [floatNumber floatValue];
NSLog(@"%.2f",f);
NSNumber *shortNumber = [NSNumbernumberWithShort:2];
NSLog(@"%@",shortNumber);
short d =[shortNumber shortValue];
NSLog(@"%hd",d);
//基本数据类型转换对象类型(提供是神马类型数据,此时使用【NSNumber numberWith后跟上相应的基本数据类型名
0 0
- OC 5 NSArray 数组 NSDictionary 字典 NSSet集
- iOS OC (五) 字典NSDictionary 数组 NSArray 集合 NSSet
- IOS 中数组、集合、字典的使用(NSArray, NSSet, NSDictionary)
- iOS中的遍历(数组NSArray,字典NSDictionary,集合NSSet)
- iOS中的遍历(数组NSArray,字典NSDictionary,集合NSSet)
- NSArray、NSSet、NSDictionary区别-OC+class
- OC中的集合类NSSet、NSArray、NSDictionary
- 【iOS开发】 中数组、集合、字典的使用(NSArray, NSSet, NSDictionary)
- NSArray,NSSet,NSDictionary
- NSArray,NSSet,NSDictionary总结
- NSArray,NSSet,NSDictionary总结
- NSArray,NSSet,NSDictionary总结
- NSArray,NSSet,NSDictionary总结
- NSArray NSSet NSDictionary
- NSDictionary,NSArray,NSSet
- NSArray,NSSet,NSDictionary总结
- NSArray,NSSet,NSDictionary
- NSArray NSSet NSDictionary
- OC 4 字符串
- UVALive 6908Electric Bike(dp)
- android studio 打包流程
- Java实现简单的栈
- virtualbox中安装centos7 mininal,配置网络
- OC 5 NSArray 数组 NSDictionary 字典 NSSet集
- 设计模式-建造者模式
- synchronized 关键字
- dhcpd.conf文件配置示例
- 常用的字符串小code
- MySQL 5.6 for Windows 解压缩版配置安装
- UVALive 6910Cutting Tree(并查集)
- 《C语言深度剖析》面试题整理
- Android studio 性能优化