OC基础第5讲)字典类 {集合类 数组,字典,集合的快速遍历 数组排序}

时间:2021-01-16 16:58:16

昨天东西没讲完,补在今天了



//

//  main.m

// 第四周第四天OC第五讲

//

//  Created by scjy on 15/11/5.

//  Copyright (c) 2015第四周. All rights reserved.

//

//                  第四周第三天OC第四讲


//   字典类    {集合类   数组,字典,集合的快速遍历     数组排序}


#import <Foundation/Foundation.h>


int main(int argc,constchar * argv[]) {

    @autoreleasepool {

        // insert code here...

        NSLog(@"Hello, World!");

      

//字典类

        /*

        字典用于保存具有映射关系(key-value)的数据集合

        对于name:张三来讲,name就是keykey对应的value就是张三

         一个key-value的组合被认为是一个条目,字典是存储key-value对容器


         

         字典类的特点:

        与数组不同,字典靠key存取元素(数组是通过下标来存取元素)

         key不能重复,value必须是对象(如果不是对象用  NSNumber,NSValue

        键值对在字典中是无序存储的

        字典也分可变字典和不可变字典

        不可变字典:字典一旦创建,键值不能更改,不可添加,不可删除,仅能读取keyvalue

        可变字典:字典创建后,键值可以更改,可以添加,可以删除,也能读取keyvalue

        字典中元素是成对出现的,不能出现单数个(键值对键值对,有键有值是一对)

         

         

         吃饭睡觉打键盘

         */

        

        //创建字典  NSDictionary

        

//        NSDictionary *dic = [[NSDictionary alloc]initWithObjectsAndKeys:

//                             @"BenZ",@"car1",

//                             @"zhang",@"car2",

//                             @"吃饭",@"car3",

//                             @"睡觉",@"car4",

//                             @"打豆豆",@"car5",

//                             @"其实是打键盘",@"car6",nil];

        

//        //获取字典元素个数

//        NSUInteger count = dic.count;

//        NSLog(@"count = %lu",count);

//        

////获取所有key

//        NSArray *allkeyArray = dic.allKeys;

//        

//        for (int i = 0; i<allkeyArray.count; i++) {

//            NSLog(@"allkeyArray[%d] = %@",i,[allkeyArray objectAtIndex:i]);

//        }

// //        NSLog (@"%@",[dic allKeys]);

//        

//        

////获取所有value

//        NSArray *allvaluesArray = dic.allValues;

//        

//        for (int i = 0; i<allvaluesArray.count; i++) {

//            NSLog(@"allvaluesArray[%d] = %@",i,[allvaluesArray objectAtIndex:i]);

//        }

//             NSLog (@"%@",[dic allValues]);

//        

//        

//        //通过key查询value

//        NSString *car1 = [dic valueForKey:@"car1"];

//        NSLog(@"car = %@",car1);

//        

//        NSString *car2 = [dic valueForKey:@"car2"];

//        NSLog(@"car = %@",car2);

//    

        

        //可变字典

          // 初始化方法

//        NSMutableDictionary  *mDictionary = [[NSMutableDictionary alloc]initWithObjectsAndKeys:

//                                              @"BenZ",@"car1",

//                                              @"zhang",@"car2",

//                                              @"吃饭",@"car3",

//                                              @"睡觉",@"car4",

//                                              @"打豆豆",@"car5",

//                                              @"其实是打键盘",@"car6",nil];

    

       //使用已经存在的不可变字典初始化一个新的可变字典

//        NSMutableDictionary *mDic1 = [[NSMutableDictionary alloc]initWithDictionary:dic];

//        

//        //使用便利构造器方法创建一个新的空的可变字典

//        NSMutableDictionary *mDic2 = [NSMutableDictionary dictionary];

//

        //增删改

        

//        //添加键值对

//        //高冷是key,逗比是value

//        [mDictionary setObject:@"doubi" forKey:@"gaoleng"];

//        NSLog(@"%@",mDictionary);

        

        

        //修改key对应的value

        

//        [mDictionary setObject:@"shifou" forKeyedSubscript:@"car2"];

//        NSLog(@"%@",mDictionary);

//        

//        [mDictionary setObject:@"shifou" forKeyedSubscript:@"car7"];

//        NSLog(@"%@",mDictionary);

//        

//        //setValue: forValue:什么时候添加键值对,什么时候修改键值对?

//        //当字典中没有这个key的时候,setValue: forValue:就是添加新的键值对

//         //当字典中有这个key的时候,setValue: forValue:就是修改当前key对应的Value

//        

//        

//    //删除键值对

//        [mDictionary removeObjectForKey:@"car3"];

//         NSLog(@"%@",mDictionary);

       

//        //遍历键值对

//        NSArray *array10=[mDictionary allKeys];

//        for (int i=0; i<array10.count; i++) {

//            NSLog(@"%@    %@",[mDictionary valueForKey:array10[i]], array10[i]);

//        }

        

         //遍历键值对方法2

//        NSArray *keyarray = [mDictionary allKeys];

//        for (int j = 0; j<keyarray.count; j++) {

//            NSLog(@"key = %@ value = %@",keyarray[j],[mDictionary valueForKey:keyarray[j]]);

//        }

//        

        

       //可以同时删除多个键值对方法

//        NSArray *arrayKeys=[NSArray arrayWithObjects:@"car3",@"car4",@"car5",@"car6", nil];

//        [mDictionary removeObjectsForKeys:arrayKeys];

//        NSLog(@"%@",mDictionary);


      

       //创建字典,里边包含班级的各个小组,每个小组中又包含这组所有成员的名字。

        

        

        //创建班级字典

        

 //老师的程序

        

//        NSMutableArray *group1 = [[NSMutableArray alloc] initWithObjects:@"小敏",@"王雪娟",@"郭飞飞",@"秦俊珍", nil];

//        NSMutableArray *group2 = [[NSMutableArray alloc] initWithObjects:@"范芳芳",@"刘海燕",@"张衡",@"李书明", nil];

//        NSMutableArray *group3 = [[NSMutableArray alloc] initWithObjects:@"佳慧",@"张鹏飞",@"乔自朋",@"*鹏" ,nil];

//        NSMutableArray *group4 =[[NSMutableArray alloc] initWithObjects:@"韩苇棋",@"练晓俊",@"郭亚茹",@"马娟娟" ,nil];

//        NSMutableDictionary *class = [[NSMutableDictionary alloc] init];

//        [class setValue:group1 forKey:@"第一组"];

//        [class setValue:group2 forKey:@"第二组"];

//        [class setValue:group3 forKey:@"第三组"];

//        [class setValue:group4 forKey:@"第四组"];

//        NSArray *class1 = [class allKeys];

//        for (int i = 0; i < class1.count; i++) {

//            //通过key值取出字典里对应的value(各小组数据)

//            NSArray *groupArray = [class valueForKey:class1[i]];

//            for (int j = 0; j < groupArray.count; j++) {

//                //通过下标访问数组里面的每一个元素

//                if (j < groupArray.count) { //防止数组越界访问,导致程序崩溃,只有j小于数组元素时候才能去访问数组元素

//

//                    NSLog(@"%@ %@", class1[i],groupArray[j]);

//                }

//                

//            }

//            

//        }

//        

//张鹏飞的程序:

//         NSArray *team=[[NSArray alloc]initWithObjects:@"team1",@"team2",@"team3",@"team4", nil];

//        NSArray *Members=[[NSArray alloc]initWithObjects:nil];

//        NSLog(@"小组:..");

//        for (int i=0; i<team.count; i++) {

//            NSMutableDictionary *group1=[[NSMutableDictionary alloc]initWithObjectsAndKeys:team[i],@"小组1", nil];

//            NSLog(@"%@",[group1 valueForKey:@"小组1"]);

//        }

//        for (int i=0; i<Members.count; i++) {

//            NSMutableDictionary *group1=[[NSMutableDictionary alloc]initWithObjectsAndKeys:Members[i],@"小组1", nil];

//            NSLog(@"%@",[group1 valueForKey:@"小组1"]);

//        }


        

 //郭亚茹的程序

//        NSArray *x = [[NSArray alloc] initWithObjects:@"妮妮",@"露露",@"小花", nil];

//        NSArray *x1 = [[NSArray alloc] initWithObjects:@"妮可妮",@"露可露",@"小可花", nil];

//        NSArray *x2 = [[NSArray alloc] initWithObjects:@"妮啦妮",@"露啦露",@"小啦花", nil];

//        

//        

//        NSMutableDictionary *class = [[NSMutableDictionary alloc] initWithObjectsAndKeys:x,@"小花组",x1,@"可可组",x2,@"啦啦组", nil];

//        

//        NSArray *allkey1= [class allKeys];

//        for (int j=0; j <allkey1.count; j++) {

//            for ( int i =0; i < x.count; i++) {

//                NSLog(@"key = %@ ,value= %@ ",allkey1[j],[[class valueForKey:allkey1[j]] objectAtIndex:i]);

//            }

//            

//        }

//        


        

        /*******************从网上找的,是正确的*******************

         

//        //向字典中添加valuekey

//        [mDictionary setValue:@"valueZHI" forKey:@"keyZHI"];

//        NSLog(@"%@",mDictionary);

//        

//        //向一个字典中添加一个字典

//        

//        NSDictionary *dict4=[NSDictionary dictionaryWithObject:@"value6" forKey:@"key6"];

//        [mDictionary addEntriesFromDictionary:dict4];

//        NSLog(@"%@",mDictionary);

//        

//        //向字典中添加valuekey

//        [mDictionary setValue:@"valueZHI" forKey:@"keyZHI"];

//        NSLog(@"%@",mDictionary);

//        

//        

//        //删除元素

//        

//        //移除指定keyvalue

//                [mDictionary removeObjectForKey:@"car1"];

//                NSLog(@"%@",mDictionary);

//        

//        

//        //删除一组keyvalue

//                NSArray *arrayKeys=[NSArray arrayWithObjects:@"car1",@"car2",@"car3", nil];

//                [mDictionary removeObjectsForKeys:arrayKeys];

//                NSLog(@"%@",mDictionary);

         

        **************************************/

        

        //改动元素

        

        

        

        //集合//


        /*

         iOS中也有表示数学中集合的类,叫做NSSet

        特点:存储的元素唯一,元素无序,元素必须是对象类型(如果是基本数据类型需要通过NSNumber,NSValue转化为对象类型)iOS中用set表示集合,分NSSetNSMutableSet

         */

        

//        NSSet *set = [[NSSet alloc]initWithObjects:@"史蒂夫",@"保罗",@"乔布斯",@"求知若饥",@"虚心若愚",@"Steve",@"Jobs", nil];

//        

//        //获取集合元素个数,重复的元素会被覆盖,只算一个

//        NSLog(@"set.count = %lu",set.count);

////        NSLog(@set.count = "%lu",(unsigned long)set.count);

//        

//        //获取集合值某个对象,有的话输出,没的话为空

//        NSString *name = [set member:@"Jobs"];

//        NSLog(@"name = %@",name);

//       

//        //判断集合中是否有某个对象

//        BOOL isHaveChen = [set containsObject:@"Jobs"];

//        NSLog(@"%d",isHaveChen);

//        

//        BOOL isHavejiao = [set containsObject:@"阿娇"];

//        NSLog(@"%d",isHavejiao);

        

        //allObjects返回集合中所有的元素

//        NSArray *allObjArray = [set allObjects];

//        for (int = 0; i<allObjArray.count; i++) {

//            NSLog(@"%@",allObjArray[i]);

//        }

        

       //anyObject返回集合中一个元素,(第一次是随机的,以后每次都返回这个)

        

//        NSLog(@"anyObject=====%@",[set anyObject]);

//        

//        

//        /****NSMutableSet****/

//        NSMutableSet *must = [[NSMutableSet alloc]initWithObjects:@"123",@"456",@"789",@"000", nil];

//        

//        //添加元素

//        [must addObject:@"jjjj"];

//        //删除

//        [must removeObject:@"123"];

        

        

        

        

        /****NSCountedSet****/

        

//        NSCountedSet  *countSet = [[NSCountedSet alloc]initWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"0",@"1",@"1",@"1", nil];

//        

//        NSLog(@"count ===== %lu",countSet.count);

        

        //countForObject计算某个元素在集合内出现的次数

//        NSInteger ajcount = [countSet countForObject:@"1"];

//        NSLog(@"count = %lu",ajcount);

        

//        //集合类型的快速枚举

//        NSArray *quickArray = [NSArray arrayWithObjects:@"zhao",@"qian",@"sun",@"li",@"zhou",@"wu",@"zheng",@"wang",nil];

//        

//        //右边是集合,左边是集合中元素的类型(类型?觉得是列举出来的元素吧)

//        for (NSString *strobj in quickArray) {

//            NSLog(@"strobj = %@",strobj);

//        }

//        

//        //字典的快速枚举

//        NSDictionary *quickdic = [NSDictionary dictionaryWithObjectsAndKeys:@"feng",@"chen",@"chu",@"wei",@"jiang",@"shen",@"han",@"yang", nil];

//        //右边是被枚举的对象,左边是枚举出来对象的类型(同上)

//        for (NSString *aaa in quickdic) {

//            NSLog(@"aaa = %@",aaa);//(aaa就是key)

//            NSLog(@"value = %@",[quickdic valueForKey:aaa]);

//        }

//        //对比,用for循环输出字典key

//        NSArray *quickkeys = quickdic.allKeys;

//        for (int i = 0; i < quickkeys.count; i++) {

//            NSLog(@"aaa ====== %@",[quickkeys objectAtIndex:i]);

//        }

//        

//        //快速枚举集合

//        

//        NSSet *quickset = [NSSet setWithObjects:@"zhu",@"qin",@"you",@"xu", nil];

//        for (NSString *strobj in quickset) {

//            NSLog(@"strobj = %@",strobj);

//        }

//        

//        //问题:假如一个不知道类型和元素个数的集合,如何快速枚举

//        for (id obj in quickset) {//id可代指所有对象类型,不具体指哪一种,格式转化符:%@

//            NSLog(@"%@",obj);

//        }

//        

        

        /********数组排序*********/

        

        //冒泡排序

          //C语言

        int count;

        int a[10]={};

        

        for (int i = 0; i<10; i++) {

            a[i]=arc4random()%(30-10+1)+10;

        }

        count = sizeof(a)%sizeof(5);

     

        for (int i=0; i<9; i++) {

            for (int j=0; j<9-i; j++) {

                int n;

                if (a[j] > a[j+1]) {

                    n = a[j];

                    a[j]=a[j+1];

                    a[j+1]=n;


                }

                           }

        }

        for (int i=0; i<10; i++) {

            NSLog(@"a[%d]=%d",i,a[i]);

        }


        

        //OC数组的排序

       /*通过OC数组冒泡排序,数组元素是整形的值*/

        

        NSMutableArray *sortarray = [NSMutableArrayarrayWithObjects:

                                     [NSNumbernumberWithInt:0] ,

                                     [NSNumbernumberWithInt:1],

                                     [NSNumbernumberWithInt:2],

                                     [NSNumbernumberWithInt:8],

                                     [NSNumbernumberWithInt:10],

                                     [NSNumbernumberWithInt:16],

                                     [NSNumbernumberWithInt:128],

                                     [NSNumbernumberWithInt:256],

                                     [NSNumbernumberWithInt:512],

                                     [NSNumbernumberWithInt:1024],nil];

        for (int i = 0; i<sortarray.count - 1; i++) {

            

            for (int j= 0; j<sortarray.count - 1-i; j++) {

                //1

                NSNumber *num1 = [sortarrayobjectAtIndex:j];

                int numInt1 = [num1intValue];

                

                NSNumber *num2 = [sortarrayobjectAtIndex:j];

                int numInt2 = [num2intValue];

                

                if (numInt1>numInt2) {

                    [sortarray exchangeObjectAtIndex:j withObjectAtIndex:j+1];

                }

                

                //2简化写法

                /*

                if ([sortarray[j] intValue] > [sortarray[j+1] intValue]) {

                    [sortarray exchangeObjectAtIndex:j withObjectAtIndex:j+1];

                }

                */

            }

        }

        

//        for (int i=0; i<10; i++) {

//            NSLog(@"a[%d]=%d",i,a[i]);

//        }

        

//练习作业

//       定义一个数组,数组中是student对象,快速遍历,选出所有女生,添加到一个新的数组中。

//       定义一个字典,字典是一个学生的信息:姓名、年龄、学号、地址.通过遍历显示学生的所有信息

        

        

        

     }

    return 0;

}