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];
   NSLog(@"arr =%@arr1 = %@",arr,arr1);//打印数组的标记是一对小括号

(2)创建拥有对象的数组
nil是一个数组定义结束的标准,数组中只能装对象,数组中打汉字是打不出来的,只能打出\u;想打出汉字,单独打印数组中的元素,如果是中文的可以正常输出,如果打印的是数组对象,是不能把数组中存储的中文正常输出的
 NSArray*arr2 = [[NSArrayalloc]initWithObjects:@"张宇",@"2",@"3",nil];
   
NSLog(@"%@",arr2);
   NSLog(@"%@",arr2[0]);

(3)使用便利构造器创建数组
 NSArray*arr3 = [NSArrayarrayWithObjects:@"zuoZhu",@"xiaoYing",@"MingRen",@"chuTian",nil];
   
NSLog(@"%@",arr3);

(4)用一个已经存在的数组,初始化另一个数组
 NSArray*arr4 = [[NSArrayalloc]initWithArray:arr3];
   
NSLog(@"==%@",arr4);
   
   
NSArray *arr5 = [NSArray arrayWithArray:arr4];
   
NSLog(@"===%@",arr5);

(5)如何访问数组中的元素
获取数组元素的个数
 NSUIntegercount = [arr5 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];
   NSLog(@"marr=%@marr1%@",mArr,marr1);
(11)向可变数组添加元素
 [marr1addObject:@"songxiaobao"];
    [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);

(14)向某个位置插入一个元素
 [mArr3insertObject:@"siyuan"atIndex:1];
   NSLog(@"%@",mArr3);
(15)交换两个位置的元素
[mArr3exchangeObjectAtIndex:0withObjectAtIndex:2];
   
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]);
    }
(21)快速枚举forin
for(集合中的对象类型  in  集合的类型){
循环体
}
(22)oc中提供的快速枚举遍历集合时不需要在关心集合中元素的个数,集合的个数有方法做内部处理
每一次循环都把找到的元素赋值给我们提供的变量(比如:NSString *string)
此时,就可以在循环体内对找到对象做一些处理(比如:打印)
注意:在快速枚举的过程中,不能对数组做任何处理(比如:删除)
for(NSString*string in mArr5) {
//        [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);
    }

(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);
    }
OC中数组排序

sel =@selector他是一个方法选择器@selector()小括号中只需要提供比较元素大小的方法就可以了
   
//sortedArrayUsingSelector返回的是一个升序的数组

NSArray*sortArray = [mArr6 sortedArrayUsingSelector:(@selector(compare:))];
   
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);
(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);

(3)字典的访问
获取字典中所有的key值
 NSArray*kArr  = [dict2 allKeys];
    NSLog(@"%@",kArr);
(4)获取字典中所有的value
NSArray*vArr = [dict2 allValues];
    NSLog(@"%@",vArr);
(5)获取字典中的键值个数
 NSUIntegercount3 = [dict2 count];
   
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);
       
    }
方法二
for(NSString*key in [dict2 allKeys]) {
       
//根据key值拿到value
       
NSString *value = [dict2 valueForKey:key];
       
NSLog(@"%@ = %@",key,value);
    }
   
方法三
 //使用快速枚举遍历字典,默认辨认是key
   
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);

(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"];
    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);


(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 ?@"包含": @"不包含");

(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);

(2)删除元素
 [mSet removeObject:@"1"];
   
NSLog(@"%@",mSet);

(3)删除集合中所有的元素
[mSet removeAllObjects];
    NSLog(@"%@",mSet);


总结: 1.NSArray数组 2.NSDictionary 字典  3.NSSet


1.NSArray是有序的,NSDictionaryNSSet是无序的
2.NSArray能通过下标访问,NSDictionary通过key类访问元素  NSSte随机访问
3.NSArray的元素可以重复,NSDictionary中的key值必须唯一,NSSet元素也是唯一的
4.显示格式:
 NSArray:(元素1,元素2.....
     NSDictionary :{key1 = value1key2 =value2}
     NSSet
{(元素1,元素2.........}
    注意:NSArrayNSDictionary经常嵌套使用


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
原创粉丝点击