• OC: 数组、集合、字典


    数组、字典、集合

    参考1   参考2  参考3  参考4  参考5

    NSArray * nn  = @[@"元素1",@"元素2",@"元素3"];

            NSUInteger i = [nn indexOfObject:@"元素1" inRange:NSMakeRange(0, 3)];

            NSLog(@"在给定范围内查找给定字符串所在的下标,如果有的话就返回第一个查找到的元素下标%lu --",i);

    //NSMakeRange 里面的范围不能超了

    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            // insert code here...
            NSLog(@"Hello, World!");
            //OC 里面的数组放的是对象必须是对象(可以存放不同类型的对象) 与 C语言里面的数组不同的是 OC里面的数组可以放不同类型的数据
            //数组 不可变数组 NSArry 数组是一个大容器 可以存放不同种 不同类的对象 不仅可以存放字符串 数组
            //创建数组 普通方法
            NSString * arr = [[NSArray alloc]initWithObjects:@"yingjie",@"liuxian", nil];//最后以 nil 结尾,nil 是数组元素结束的标志   初始化方法是:initWithObjects
            //便利构造器写法
            NSArray * arr1 = [NSArray arrayWithObjects:@"xiaobing", nil];
            //创建一个空的数组
            NSArray * arr2 = [NSArray array];
            //把数组 arr1 存放到 arr3 里面
            NSArray * arr3 = [NSArray arrayWithArray:arr1];
            NSLog(@"%@",arr3);//在控制台数组的输出都带一个小括号
            //创建一个简单的写法
            NSArray * arry = @[@"元素1",@"元素2",@"元素3"];
            //获取数组元素个数 count
            NSUInteger c = [arry count];
            NSLog(@"%lu",c);
            //获取数组中某个下标的数组元素
            NSString * str = [arry objectAtIndex:1];
            NSLog(@"%@",str);
            //获取数组的首个元素  firstObject  也可以是 objectAtIndex:0
            NSString * fist = [arry firstObject];
            //获取数组的最后一个元素  lastObject
            NSString * last = [arry lastObject];
            NSLog(@"%@ %@",fist,last);
            //是否包含某个对象元素
            BOOL isTrue = [arry containsObject:@"1"];
            NSLog(@"%ld e",isTrue);
            //获取数组元素的下标
            NSUInteger index = [arry indexOfObject:@"元素1"];
            NSLog(@"%ld f",index);
            /*//在给定范围内查找给定字符串所在的下标,如果有的话就返回第一个查找到的元素
            NSArray * nn  = @[@"元素1",@"元素2",@"元素3"];//该例子没有跟上********且有错误
            NSUInteger i = [nn indexOfObject:@"2" inRange:NSMakeRange(0, 4)];
            NSLog(@"%lu --",i);*/
            
            //数组的比较 比较给定的数组与原来的数组是否相等 isEqualToArray 如果对应的元素不等,改了顺序才等,那也是不相等
            BOOL isEqual = [arr1 isEqualTo:arr2];
            NSLog(@"%d d",isEqual);
            //遍历数组元素
            for (int i = 0; i < [arry count]; i++) {
                NSLog(@"%@ 000",[arry objectAtIndex:i]);
            }
            //快速遍历、枚举出(数组集合)的方法   在集合 或者数组里查找元素
            for (NSString *object in arry) {
    //            NSLog(@"%@ 111",object);
                NSLog(@"%@ 111",object);
            }
           //for in 在集合里面遍历元素,每遇到一个对象元素都会把元素取出,执行 forin 里面的语句,直到集合里没有对象为止
            for (id object in arry) {
                //            NSLog(@"%@ 111",object);
                NSLog(@"%@ 111",object);
            }
            
            
            //可变的数组   NSMutableArray  是 NSArray 的子类
            //比 NSArray  多的功能是 ???
    //        创建一个可见数组 NSMutableArray
            NSMutableArray * muArry = [NSMutableArray arrayWithCapacity:1];//便利构造器
            NSMutableArray * muArry1 = [NSMutableArray arrayWithCapacity:2];//普通的方法
            //添加数组元素
            [muArry addObject:@"22"];//把不可变数组元素添加到可变的数组中
            NSLog(@"%@",muArry);
            NSMutableArray * muArry2 = [NSMutableArray arrayWithArray:arry];//便利构造器吧一个数组元素添加到可变数组中
            //插入一个数组元素
            [muArry insertObject:@"hello" atIndex:1];
            NSLog(@"%@",muArry);
    //        [muArry insertObjects:arr atIndexes:set];  //这里是一个集合
            //删除一个数组元素
            [muArry removeLastObject]; //删除数组中最后一个元素
            NSLog(@"%@",muArry);
            [muArry removeObjectAtIndex:0];
             NSLog(@"删除数组中指定下标的元素%@",muArry);
            //删除指定范围的元素
            [muArry insertObject:@"hello0" atIndex:0];
            [muArry insertObject:@"hello1" atIndex:1];
            [muArry insertObject:@"hello2" atIndex:2];
            [muArry insertObject:@"hello3" atIndex:3];
            [muArry insertObject:@"hello4" atIndex:4];
            [muArry removeObject:@"hello4" inRange:NSMakeRange(0, 5)];//这里创造的范围不能超出了
            NSLog(@"%@",muArry);
            //全部删除数组的元素
            [muArry removeAllObjects];
            NSLog(@"全部删除数组的元素后:%@",muArry);
            [muArry addObjectsFromArray:@[@"z00",@"a11",@"w22",@"f33",@"y44",@"t55",@"r66",@"l77"]];//这里是一个简便的nsarry写法  里面要是写上 汉字的话 打印的是 一行其他的编码
            [muArry replaceObjectAtIndex:0 withObject:@"11"];//替换第一个元素为11
            NSLog(@"%@",muArry);
            //交换指定下标的元素对象
            [muArry exchangeObjectAtIndex:0 withObjectAtIndex:2];//交换第一个 第二 个元素的对象
            NSLog(@"交换指定下标的元素对象%@",muArry);
            //对于常用的方法最好是能记住
            //对数组排序 Sorts the array’s elements in ascending order, as determined by the comparison method specified by a given selector.
            // sortUsingSelector: 对数组的排序
            [muArry addObject:@"12"];
            [muArry addObject:@"01"];//这里的数字是字符串对象
            NSArray * ny = [muArry sortedArrayUsingSelector:@selector(compare:)];//这里是对立面的元素进行排序,然后把排好序的数组返回,这里没有操作本身
            NSLog(@"%@",ny);
            //
            [muArry sortUsingSelector:@selector(compare:)];//这里是直接排序,这里是操作了本身
            NSLog(@"%@",muArry);
    
        }
        return 0;
    }
     数组使用
    //为空的可变字典添加键值对
            [muDic setObject:@"value" forKey:@"key"];//第一次 发现没有 这个键值对 就自动的添加一对
            [muDic  setObject:@"123" forKey:@"key"];//第二次 把上面的 value 的值修改了,前提是有这个 key
    //        [muDic setValue:@"value" forKey:@"key"];
            NSLog(@"%@",muDic);
     set forkey 的使用

    //字典 存放的是一对 Key-value 值(键值对),通过 key 找到 value

          用来存储——————一一对应的关系的数据

          一个 value 可以对应多个 key

          一个 key   只能对应一个 value

          不可变字典:对象创建

                    字典元素个数(键值对)个数 count

                    获取所有key              allkeys

                    获取所有的value           allValues

                    获取key 对应的 value      objectForKey

                    遍历                     forin

          可变字典:对象创建

                    添加元素(键值对)         setObject:ForKey

                    修改key 对应的value      

          */

        

            //创建字典对象

            //便利构造器的写法创建了一个不可变的字典

    //今天所学集合的总结

            /*

             NSarry          有序的

             NSDictionary    无序的  一个 Key 只对应一个 value ;一个 value 可以对应多个 key

             NSSet           无序的  元素的唯一性

             他们都是集合:共同性 求集合的元素个数,我们都是用 count 的方法

             对象的创建都有两种:初始化 initWithArray ,便利构造器

             对集合的一个快速枚举遍历 forin  对于数组来说遍历的是数组的元素 对于字典来书遍历的是字典的key值  对与集合来说,也是集合中元素的个数

             在自己定义的类的时候, 不能用 :NSString 、NSMutableStringn 、 NSArray NSMutableArray、  NSDictionary、 NSMutableDictionary、 NSSet、NSMutableSet、NSCountedSet 做父类 。因为这些类 不是单一的一个类,而是一个类族(多个类的组合)(也可以叫做容器类)

             */

    #import <Foundation/Foundation.h>
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
         /*
          //字典 存放的是一对 Key-value 值(键值对),通过 key 找到 value
          用来存储——————一一对应的关系的数据
          一个 value 可以对应多个 key
          一个 key   只能对应一个 value
          
          不可变字典:对象创建
                    字典元素个数(键值对)个数 count
                    获取所有key              allkeys
                    获取所有的value           allValues
                    获取key 对应的 value      objectForKey
                    遍历                     forin
          
          可变字典:对象创建
                    添加元素(键值对)         setObject:ForKey
                    修改key 对应的value
          
          */
        
            //创建字典对象
            //便利构造器的写法创建了一个不可变的字典
    //        NSDictionary * dic = [NSDictionary dictionaryWithObjects:@"刘洋" forKeys:"name"];//这里是一个不可变字典
            //初始化写法
            NSDictionary * dic1 = [[NSDictionary alloc]initWithObjectsAndKeys:@"liu yang",@"name", @"xxx",@"gender",@"45",@"age",@"98.5",@"score",@"liu yang",@"nn", nil];//字典里不能有多个相同的 key
            NSLog(@"%@",dic1);
            //字典是无序的 打印的结果是 Key = value;
            //字典 key 的个数
            NSUInteger count = [dic1 count];
            NSLog(@"%lu",count);
            //获取字典中 key 对应的 value 的值
            NSString * ns = [dic1 valueForKey:@"name"];
            NSString * val = dic1 [@"anme"];//简单写法 等于上边
            NSLog(@"%@",ns);
            [dic1 objectForKey:@"name"];//不确定是个字符串类型
            //objectForKey 与 valueForKey 区别
            /*
            dic1 objectForKey:<#(id)#>
            dic1  valueForKey:<#(NSString *)#>
            */
            NSString * name = [dic1 valueForKey:@"name"];
            NSString * name2 = [dic1 objectForKey:@"name"];
            //allKeys 获取字典里所有的 key 值,但并不能保证 返回的顺序是有序的
            NSArray * keys = [dic1 allKeys];
            NSLog(@"%@",keys);
            //获取字典中所有 value 的值
            NSArray * values = [dic1 allValues];
            NSLog(@"%@",values);
            //添加一个键值对  下面方法在文档里找不到    ?KVC
    //        [dic1 setValue:@"paly" forKey:@"hobby"]; //必须是存在的
    //        有问题[dic1 setValue:@"paly" forKey:@"name"];
            NSLog(@"%@",keys);
            
            
            //可变字典  NSMutableDictionary
            NSMutableDictionary * muDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"sunday",@"week",@"10",@"day", nil ];
    //        NSMutableDictionary * muDic2 = [NSMutableDictionary dictionaryWithCapacity:10];//初始化的字典没有一个间组织对
            //为空的可变字典添加键值对
            [muDic setObject:@"value" forKey:@"key"];//第一次 发现没有 这个键值对 就自动的添加一对
            [muDic  setObject:@"123" forKey:@"key"];//第二次 把上面的 value 的值修改了,前提是有这个 key
    //        [muDic setValue:@"value" forKey:@"key"];
            NSLog(@"%@",muDic);
            //对字典的遍历,相当于便利出所有的Key值
            for (id object in muDic) {
                NSLog(@"%@",object);
            }
            //崩溃方法   setObject:@"123" forKey:@"key" 是可变字典的修饰方法。所以对于不可变字典不能用
            //可变字典与不变字典的转化,把不可变字典用方法copy到可变的字典里面
            NSMutableDictionary * dd = [NSMutableDictionary dictionaryWithDictionary:dic1];
            
            
            
            //集合 (NSSet)子类 :NSMutableSet
            //1.无序的  2.互异性(每个元素都有唯一性)  3.元素的个数只是互异性之后的元素个数
            //创建一个集合对象
            //NSSet 只有三个方法: count  anyObject  allObjects 三个方法
            NSSet * set = [[NSSet alloc]initWithObjects:@"22",@"81",@"12",@"2",@"31",@"4",@"2",@"6", nil];
            NSLog(@"%@ 有%lu个元素",set,[set count]);
            //获取集合中的元素
            NSString * str1 = [set anyObject];//获取随机的元素
            id  str2 = [set anyObject];
            NSLog(@"%@",str1);
            NSLog(@"%@",str2);
            //获取所有的元素
            NSArray * asa = [set allObjects];
            NSLog(@"%@",asa);
            //遍历集合
            for (id ob in set) {
                NSLog(@"%@",ob);
            }
            //子类 可变集合  NSMutableSet : NSSet
            //创建
            NSMutableSet * newSet = [NSMutableSet setWithCapacity:1];
            //添加元素
            [newSet addObject:@"new"];
            [newSet addObject:@"old"];
            //移除元素(一个)
            [newSet removeObject:@"new"];
            //移除全部元素
            [newSet removeAllObjects];
            
            //计数集合 NSCountSet : NSMutableSet :NSObject
            NSCountedSet *countSet = [[NSCountedSet alloc]initWithObjects:@"11",@"22",@"11", @"11",@"33",@"11", nil];
            //计算元素出现的次数
            NSUInteger num1 = [countSet countForObject:@"11"];
            NSUInteger num2 = [countSet countForObject:@"33"];
            NSLog(@"11出现%lu次 33出现%lu次",num1,num2);
            
            //今天所学集合的总结
            /*
             NSarry          有序的
             NSDictionary    无序的  一个 Key 只对应一个 value ;一个 value 可以对应多个 key
             NSSet           无序的  元素的唯一性
             他们都是集合:共同性 求集合的元素个数,我们都是用 count 的方法
             对象的创建都有两种:初始化 initWithArray ,便利构造器
             对集合的一个快速枚举遍历 forin  对于数组来说遍历的是数组的元素 对于字典来书遍历的是字典的key值  对与集合来说,也是集合中元素的个数
             在自己定义的类的时候, 不能用 :NSString 、NSMutableStringn 、 NSArray NSMutableArray、  NSDictionary、 NSMutableDictionary、 NSSet、NSMutableSet、NSCountedSet 做父类 。因为这些类 不是单一的一个类,而是一个类族(多个类的组合)(也可以叫做容器类)
             */
         }return 0;
    }
    字典学习

     1.制作一个联系人信息博 仿照手机通

    NSRange 是一个结构体,有两个成员变量 location   length  

            NSString * string1 = @"我是字符串";

            NSRange range = [string1 rangeOfString:@"我是"];

            NSLog(@"%lu %lu",range.location ,range.length);

    rangeOfString:是看一个字符串里面是否有特定的字符串,如果有的话,就返回给NSrange 类型的结构体变量

    substringFromIndex 是从下标4的位置开始到结尾,包含4(本例)   

    substringToIndex 是从开始位置到下标位置(不包含下标位置)

            NSString * string1 = @"what a beautiful day";

            NSString * string2 = [string1 substringFromIndex:4];

            NSString * string3 = [string1 substringToIndex:4];

            NSLog(@"%@",string2);

            NSLog(@"%@",string3);

    字符串也可以这样的初始化(初始化的好几种方法)

            NSString *  ss = [NSString string ];

            ss = @"456";

            NSLog(@"%@",ss);

    substringWithRange 的使用截取一定范围的字符串

            NSString * string1 = @"what a beautiful day";

            NSString * string2 = [string1 substringFromIndex:4];

            NSString * string3 = [string1 substringToIndex:4];

            NSLog(@"%@",string2);

            NSLog(@"%@",string3);        

            NSRange starToend = NSMakeRange(1, 4);

            NSString * newString = [string1 substringWithRange:starToend]; // 

            NSLog(@"%@",newString);

    stringByAppendingString:字符串拼接的用法

            NSString * string = @"what a beautiful day";

            NSString * string1 = [string stringByAppendingString:@"拼接字符串"];

            NSLog(@"%@",string1);

    stringByAppendingFormat:的用法 拼接给定格式的字符串

            NSString * string2 = [string stringByAppendingFormat:@"他今年%d岁",12];

            NSLog(@"%@",string2);

    stringByReplacingOccurrencesOfString:替换 (本例 吧所有的 a 都替换为 b )

            NSString * string3 = [string stringByReplacingOccurrencesOfString:@"a" withString:@"b"];

            NSLog(@"%@",string3);

    //注意:原来的字符串本身并没有发生改变,仅仅吧输出的形式改变了,以上的都是这样的

    stringByReplacingCharactersInRange:NSMakeRange(0, 4) withString:使用

            NSString * string4 = [string stringByReplacingCharactersInRange:NSMakeRange(0, 4) withString:@"我换了给定位置的字符串"];

            NSLog(@"%@",string4);

    比较字符串 

            NSString * string = @"hellow";

            NSString * string1 = @"how";

            NSComparisonResult result = [string compare:string1];//结果有三个值 (-1 前者小于后 )(0 前等于后)(1 前大于后)

    字符串转换大小写函数

    NSString * newTem = [tmpStr lowercaseString];//全部小写

    NSString * newTem2 = [tmpStr uppercaseString];//全部大写

     NSString * newTem3 = [tmpStr capitalizedString]; //首字母大写(所有的子字符串首字母大写)

    //字符串中的数字转化为基本的数字

            NSString *numStr = @"234";

            NSInteger newNum = [numStr integerValue];//得到长整型数字

            NSLog(@"%ld",newNum);

            float newNum0  = [numStr floatValue];//转换为浮点型数字

            NSLog(@"%.2f",newNum0);

            int newNum1 = [numStr intValue];//转化为int整数

            NSLog(@"%d",newNum1);

        char nam[20] = {0}, address[100] = {0};
        printf("请输入名字拼音");
        scanf("%s",nam);
        printf("请输入住址");
        scanf("%s",address);
        NSString * na = [[NSString alloc]initWithUTF8String:nam];
        self->_name = na;//注意要放的顺序,转码一个放一个
        NSString * ad = [[NSString alloc]initWithUTF8String:address];
        self->_address = ad;
    //    NSLog(@"%@",na);
        return self;//把存有名字 地址的数组传出
     OC 与 C 之间的转码使用
  • 相关阅读:
    osc搜索引擎框架search-framework,TngouDB,gso,
    当Scheduler拿不到url的 时候,不能立即退出
    摘要算法CRC8、CRC16、CRC32,MD2 、MD4、MD5,SHA1、SHA256、SHA384、SHA512,RIPEMD、PANAMA、TIGER、ADLER32
    sha256
    非对称加密RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。使用最广泛的是RSA算法
    3个著名加密算法(MD5、RSA、DES)的解析
    DOM
    面向对象
    抽象工厂在ADO.Net中的应用
    Provider Pattern提供者模式和策略模式
  • 原文地址:https://www.cnblogs.com/benpaobadaniu/p/4729642.html
Copyright © 2020-2023  润新知