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 之间的转码使用
原文地址:https://www.cnblogs.com/benpaobadaniu/p/4729642.html