OC-字符串.數組.字典.集合

一.字符串

1.  查看類的基本信息
    /*
     * 一個類由.h和.m文件組成
     
     * .h: 聲明他的屬性與方法
     .m: 具體的實現
     
     * OC不開源:只能看到系統類的.h文件,不能看到系統類的.m文件
     
     * 進入類的.h文件能要能找到以下信息
     
     1. 類的父類
     2. 類遵循哪些協議
     3. 類所屬框架
     4. 類里面的方法
     */
    
    
    /*
     * 字符串類
     
     * NSString:不可變字符串
     
     對象確定后,不能夠修改字符串的內容,也就是說不能對字符串進行增刪改查操作
     
     * NSMutableString:可變字符串
     
     對象確定后,能夠修改字符串內容,能夠對字符串進行增刪改查操作
     */

2.  NSString不可變字符串

    創建一個字符創常量

    1.通過直接賦值,創建一個字符串常量

            NSString *str1 = @"字符串1";
    
            //通過初始化方法和便利構造方法創建一個空字符串對象

            NSString *str2 = [[NSString alloc]init];
            NSString *str3 = [NSString string];
    
            //給空字符串對象賦值

            str2 = @"字符串2";
            str3 = @"字符串3";

    2.快速創建一個字符串

            //通過帶參數的init方法快速創建字符串
            NSString *string4 = [[NSString alloc]initWithString:@"字符串4"];
    
            //通過帶參數的便利構造方法快速創建字符串
            NSString *string5 = [NSString stringWithString:@"字符串5"];
    
    3.創建一個格式化的字符串

            int a = 6;
    
            //通過帶參數的便利構造方法創建格式化字符串,后面的格式,跟NSLog括號內的一樣
            NSString *string6 = [NSString stringWithFormat:@"字符串%d",a];
            NSLog(@"字符串%d",a);
    
            //通過帶參數的init初始化方法創建格式化字符串
            NSString *sting7 = [[NSString alloc]initWithFormat:@"字符串%d",a];

    4.字符串的比較

            NSString *string8 = @"ab";
            NSString *string9 = @"abc";
    
    
            /*
             * NSOrderedDescending: 代表string8>string9
             * NSOrderedSame: 相等
             * NSOrderedAscending:string8<sting9
             */
    
            //區分大小寫的比較
            NSComparisonResult resutl = [string8 compare:string9];
    
            //不區分大小寫的比較
            NSComparisonResult result1 = [string8 caseInsensitiveCompare:string9];
    
            //isEqualTostring比較字符串對象的內容是否相同,==比較兩個字符對象的內存地址是否一樣
           BOOL isEqual = [string8 isEqualToString:string9];

    5.字符串的轉換


            NSString *string10 = @"aBcDeFg";
    
            //uppercaseString 將字母轉化成大寫
            NSString *upperTest = [string10 uppercaseString];
    
            //lowercaseString 將字母轉化成小寫
            NSString *lowerTest = [string10 lowercaseString];
    
            //capitalizedString 將首字母變成大寫,后面變成小寫
            NSString *capitalTest = [string10 capitalizedString];

    6.字符串的截取與拼接


            NSString *string11 = @"hello iOS";
    
            subtringToIndex表示從頭截取到哪里
            NSString *subToString = [string11 substringToIndex:5];
    
            substringFromIndex表示從哪里開始截取到尾
            NSString *subFromString = [string11 substringFromIndex:6];
    
            NSRang規定一個返回,locationd代表從哪里開始截取,length代表截取多長
            NSRange rang = {1,1};
    
            substringWithRange表示按指定的范圍截取
            NSString *subRangString = [string11 substringWithRange:rang];
    
            //通過length獲取到字符串的長度
            long strLeng = string11.length;
    
    
            NSString *string12 = @"hello";
    
            stringByAppendingString拼接字符串
            NSString *appendString = [string12 stringByAppendingString:@"你好"];
    
            int b = 12;
    
            格式化拼接字符串
            NSString *formatAppendString = [string12 //stringByAppendingFormat:@"你好%d",b];
    
           字符串轉數組
           NSString *string13 = @"劉偉改變世界的人,是真的";
    
           componentsSeparatedByString用特定字符分割字符串
           NSArray *arry = [string13 componentsSeparatedByString:@","];
 
3.  NSMutableString  可變字符串 

    1.可變字符串強烈不建議直接賦值

           NSMutableString *string14 = [NSMutableString 
           stringWithString:@"字符串14"];

           NSMutableString *string15 = [[NSMutableString alloc]initWithString:@"字符串15"];

    2.可變字符串的增->使原字符串改變

           //appendString是對自身進行修改,如果方法沒有返回值一般都是對自身進行修改
           [string14 appendString:@"修改1"];
    
           //appendFormat對自身進行格式化拼接
           int c = 14;
           [string14 appendFormat:@" %d",c];
    
           //insertString:atIndex 在字符串的指定位置插入內容
           [string14 insertString:@"??" atIndex:3];
    
    3.可變字符串的刪->刪除原字符串的某些內容

            //deleteCharactersInRange刪除原字符串中指定區域的字符

            NSRange rang1 = {5,2};

            [string14 deleteCharactersInRange:rang1];
    
    4.可變字符串的改->修改原字符串的內容

            NSRange rang2 = {7,4};
            [string14 replaceCharactersInRange:rang2 withString:@"成功"];
    
    5.可變字符串的查->查找原字符串中是否有指定的字符

           //containsString查找原字符串中是否有指定字符,并沒有修改原字符
           BOOL isHeart = [string14 containsString:@"??"];

二.數組

1.NSArrary 不可變數組

    1.數組對象的創建

            //Foundation框架中提供了很多的集合類如:NSArray,NSMutableArray但是這些類只能存放OC對象類型的數據
    
            NSArray *array5 = @[@"",@"",@""];   // @"5"等價于@5

            NSArray *array1 = [NSArray arrayWithObject:@"one"];
            NSArray *array2 = [NSArray arrayWithObjects:@"one",@"two",@"three",nil];
            NSArray *array3 = [NSArray arrayWithArray:array1];

            NSLog(@"array1 : %@", array1);
            NSLog(@"array2 : %@", array2);
            NSLog(@"array3 : %@", array3);
    
            NSArray *array4 = [[NSArray alloc]initWithArray:array2];
    
            NSLog(@"array4 : %@",array4);

    2.獲取數組中的元素個數以及訪問數組元素

            NSArray *array5 = [[NSArray alloc]initWithObjects:@"一只羊",@"兩只羊",@"三只羊",nil];
    
            long count = [array5 count];
    
            NSLog(@"array5中元素的個數 = %ld",count);
    
            NSString *string1 = [array5 objectAtIndex:0];
    
            NSString *string2 = array5[2];
    

            NSLog(@"array5中的第一個元素是\n%@",string1);
    
    3.追加數組中的內容


            NSArray *array6 = [NSArray arrayWithObjects:@"蓋倫",@"寒冰",nil];
    
            NSArray *array7 = [array6 arrayByAddingObject:@"liulang"];
    
            //數組可以直接輸出
            NSLog(@"array7 : %@",array7);
    
    4.數組轉字符串

            NSArray *array8 = [NSArray arrayWithObjects:@"I",@"Love",@"You", nil];
    
            NSString *string9 = [array8 componentsJoinedByString:@"??"];
    
            NSLog(@"string9 : %@",string9);

    5.判斷數組中是否存在一個指定的對象

            NSArray *array9 = [NSArray arrayWithObjects:@"愛美的人",@"愛吃的人",@"愛笑的人",@"愛唱歌的人",nil];
    
            BOOL isContain = [array9 containsObject:@"愛玩游戲的人"];

            NSLog(@"isContain :%d",isContain);

    6.根據指定的對象返回索引下標、返回數組中最后一個元素

            NSArray *array10 = [NSArray arrayWithObjects:@"mac",@"window",nil];
    
            //索引元素位置
            NSInteger index = [array10 indexOfObject:@"mac"];
            NSLog(@"index = %ld",index);
            
            //輸出最后一個字符串
            NSString *lastObject = [array10 lastObject];
            NSLog(@"lastObject of lastObject = %@",lastObject);

    7.數組排序

            NSArray *sortArray = @[@"b",@"c",@"d",@"z",@"r"];
    
            //設置比較方法,升序
            NSArray *resultArray = [sortArray sortedArrayUsingSelector:@selector(compare:)];
    
    
            //能設置升序還是降序
            NSArray *resultArray1 = [sortArray sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) 
            {
        
             return [obj1 compare:obj2];
        
             } ];


2. NSMutableArray(可變數組)       

    0.可變數組的賦值

             NSMutableArray *mutableArray1 = [NSMutableArray    arrayWithObjects:@"xiaohong",@"xiaoming",@"xiaohua",@"xiaoqiao",nil];
    
    1.新增

            [mutableArray1 addObject:@"xiaolan"];
    
            NSLog(@"新增后的結果 = %@",mutableArray1);
    
    2.插入

            [mutableArray1 insertObject:@"jiaodaozhuren" atIndex:1];
    
            NSLog(@"插入后的結果 = %@",mutableArray1);
 
    3.刪除最后一個元素

            [mutableArray1 removeLastObject];
    
            NSLog(@"移除最后一位元素后的結果 = %@",mutableArray1);
    
    4.刪除指定的元素        

            [mutableArray1 removeObject:@"xiaoming"];
    
            NSLog(@"刪除指定元素后的結果 = %@",mutableArray1);
    
    5.刪除指定位置的元素

            [mutableArray1 removeObjectAtIndex:1];
    
            NSLog(@"刪除指定位置的元素后的結果 = %@",mutableArray1);
    
    6.批量刪除

            NSArray *deleteArray = [NSArray arrayWithObjects:@"xiaohua", @"xiaoqiao", nil];
    
            [mutableArray1 removeObjectsInArray:deleteArray];
    
            NSLog(@"批量刪除后的結果 =: %@", mutableArray1);
    
    6.替換元素

            [mutableArray1 replaceObjectAtIndex:0 withObject:@"It is over"];
    
            NSLog(@"replace: %@", mutableArray1);

    7.遍歷數組

            [mutableArray1 addObjectsFromArray:deleteArray];
    
            for (int index = 0; index<3; index++) 
            { 
               NSLog(@"最終數組里第%d個元素是 : %@",index+1,mutableArray1[index]);
            }

    8.數組的遍歷

            NSArray *greatPersonArray = @[@"霍金",@"愛因斯坦",@"居里夫人",@"牛頓",@"愛迪生",@""];
    
    
           //for(;;;)遍歷數組

           for(int index = 0;index<greatPersonArray.count;index++)
           {            
             NSLog(@"第%d個偉人是%@",index+1,greatPersonArray[index]);
           }
    
          //for...in 快速遍歷數組
          
          /*
          
          *  in左邊: 放一個數組內容的引用,沒有實例化的對象就叫做引用
     
          *  in右邊: 放要遍歷的數組
     
          *  核心: 從頭遍歷指定數組,將每次遍歷到的值給in左邊的對象
     
          *  當數組里面的元素被遍歷完以后,for循環自動結束
     
          */
          
          for (NSString *str in greatPersonArray)
           {
             NSLog(@"快速遍歷%@",str);
           }

三.字典

1.查看API找方法
    /*
     * 判斷指定字符串是否在字符串的頭部
     
     * 判斷指定字符串是否在字符串的尾部
     
     * 將數字型字符串轉化為基本數據類型
     */
    
    NSString *testStr = @"123456789";
    
    BOOL isPreFix = [testStr hasPrefix:@"12"];
    
    BOOL isSuffix = [testStr hasSuffix:@"89"];
    
    int testStrInt = [testStr intValue];

2.創建一個數組,里面存放NSNumber類型的數據,通過for..in遍歷該數組

        //通過NSNumber封裝基本數據類型

        NSNumber *num1 = [NSNumber numberWithInt:1];
        NSNumber *num2 = [NSNumber numberWithInt:2];
    
        NSArray *numberArray = @[num1,num2,@(3)];
    
        for (NSNumber *num in numberArray) 
        {    
        NSLog(@"%@",num);
        }

3.字典的基本知識

        /*
        * 字典通過key/Value來存取值,數組通過下標值來存取
     
        * 字典是無序的
     
        * key/value 是成對出現的
     
        * 格式:@{key:value,key:value}
     
        * 因為字典是通過key來存取值的,所以效率會比數組稍高
     
        * key和vlue,不一定非得是字符串,也可以是其他對象,但一般都使用字符串
     
        */

4.NSDictiondary不可變字典

    1.字典對象的創建

        //通過直接賦值
        NSDictionary *dict1 = @{@"name":@"花兒",@"age":@"18"};
    
        //alloc init
        NSDictionary *dict2 = [[NSDictionary alloc]init];
    
        //構造方法
        NSDictionary *dict3 = [NSDictionary dictionary];
    
        //初始化的時候給賦值,都用逗號分隔,key在后,值在前,系統會自動判斷鍵值,給的參數要是雙數
        NSDictionary *dict4 = [[NSDictionary alloc]initWithObjectsAndKeys:@"18",@"age",@"小薇",@"name", nil];
    
        //利用構造函數創建字典對象時給初始值
        NSDictionary *dict5 = [NSDictionary dictionaryWithObjectsAndKeys:@"1000",@"hurt", nil];
    
        //將一個字典放到另一個字典中
        NSDictionary *dict6 = [[NSDictionary alloc]initWithDictionary:dict5];
    
        //通過讀取存放字典數據的文件,來創建字典
        NSDictionary *dict7 = [[NSDictionary alloc]initWithContentsOfFile:nil];
    
        //將url中存放的字典放到創建的字典對象中
        NSDictionary *dict8 = [[NSDictionary alloc]initWithContentsOfURL:nil];
    
    2.獲取字典的值

        NSDictionary *dict9 = @{@"where":@"教室",@"what":@"上課",@"how":@"坐著"};
    
        dict9[@"what"];

        [dict9 objectForKey:@"how"];
    
        //通過方法count獲取到字典中鍵值對的個數

        long num = [dict9 count];
    
    3.獲取到字典所有的鍵和所有值

        //allkey獲取到字典中所有的鍵

        NSArray *allkeysArray = [dict9 allKeys];

        //allvalue獲取到字典中所有的值

        NSArray *allValueArray = [dict9 allValues];
    
        //通過遍歷字典中的鍵,來遍歷字典
        for (NSString *key in allkeysArray) 
        {            
           NSLog(@"%@",dict9[key]);
         }
    
        NSString *temp = allkeysArray[0];
        NSLog(@"%@",dict9[temp]);
    
        temp = allkeysArray[1];
        NSLog(@"%@",dict9[temp]);

        temp = allkeysArray[2];
        NSLog(@"%@",dict9[temp]);
    
    4.枚舉器訪問

        NSDictionary *dict10 = @{@"age":@"19",@"name":@"小花"};
    
        //keyEnumerator 來獲取到字典中所有的鍵,將所有的鍵放到一個容器中 objectEnumerator獲取到字典中所有的值
    
        NSEnumerator *result = [dict10 objectEnumerator];
    
        //通過for...in遍歷這個容器
       for (NSString *key in result)
        {          
           NSLog(@"%@",key);
        }
    
        NSString *temp;
    
        //result 通過nextObject方法依次獲取到容器中的結果,一旦nextObject返回的結果為nil,就跳出循環
        while (temp = [result nextObject])
         {          
            NSLog(@"高大上%@",temp);
         }

5.NSMutableDictionary 可變字典->工作中推薦直接使用這個   

    1. 給字典賦值簡單方式 和 字典賦值復雜方式
        
        給字典賦值簡單方式
        dict11[@"name"] = @"小偉";
        dict11[@"age"] = @"12";
    
        給字典賦值復雜方式
        [dict11 setValue:@"173" forKey:@"height"];

    2.創建指定元素個數的字典
        
        //創建指定元素個數的字典,但如果賦值要超過這個數的話,字典會自動擴充容量
        NSMutableDictionary *dict12 = [NSMutableDictionary dictionaryWithCapacity:1];
    
        dict12[@"key1"] = @"value1";
        dict12[@"key2"] = @"value2";
    
        //setDictionary 重新給該字典賦值
        [dict12 setDictionary:@{@"key3":@"value4"}];

    3.移除字典元素

        //removeAllObjects 全部移除
        [dict12 removeAllObjects];
    
        //通過指定key來移除指定的元素
        [dict12 removeObjectForKey:@"key3"];
    
        //批量移除
        [dict12 removeObjectsForKeys:@[@"key1",@"key2"]];

四.集合

1.集合的基本概念

        /*
      
        *  集合:存放數據的容器
      
        *  與數組的區別:

         1. 集合是無序的
         2. 集合不允許有重復的值
         3. 集合也只能存放對象
      
        */

2.NSSet 不可變集合

    1.集合的賦值和數組的轉化

        //init 方法
        NSSet *set1 = [[NSSet alloc]init];
    
        //構造方法
        NSSet *set2 = [NSSet set];
    
        //創建對象并賦初值
        NSSet *set3 = [[NSSet alloc]initWithObjects:@1,@2,@3, nil];
    
        NSArray *array = @[@"齊白石",@"鄭板橋",@"達芬奇"];
    
        //將數組轉化集合
        NSSet *set4 = [NSSet setWithArray:array];
    
        //將一個元素放到新創建的集合中
        NSSet *set5 = [NSSet setWithObject:@5];
    
    2.通過枚舉器訪問集合元素

        //數組轉化為集合

        NSArray *painterArray = @[@"唐伯虎",@"齊白石",@"梵高"];

        NSSet *paiinterSet = [NSSet setWithArray:painterArray];
    
        NSArray *shiRenArray = @[@"唐伯虎",@"李白",@"杜甫"];

        NSSet *shiRenSet = [NSSet setWithArray:shiRenArray];
    
        //for循環遍歷集合
        for (NSString *temp in paiinterSet)
         {            
            NSLog(@"畫家=%@",temp);           
         }
    
        //枚舉器遍歷集合
        NSEnumerator *result = [shiRenSet objectEnumerator];

        id temp;

        while (temp  = [result nextObject])

         {     
            NSLog(@"詩人=%@",temp);
         }
    
    3.判斷兩個集合是否有交集


        //判斷是否有交集

        BOOL isIntersect = [paiinterSet intersectsSet:shiRenSet];
    
        //判斷前者是否是后者的子集

        BOOL isSub = [paiinterSet isSubsetOfSet:shiRenSet];

3. NSMutableSet 可變集合

    1.創建指定元素個數的一個集合對象

        NSMutableSet *set4 = [NSMutableSet setWithCapacity:1];
    
    2.給集合添加單個元素

        [set4 addObject:@"朱元璋"];
    
    3.給集合批量添加元素

        [set4 addObjectsFromArray:painterArray];
    
    4.移除集合中的一個元素

        [set4 removeObject:@"朱元璋"];
    
    5.移除集合中的所有元素

        [set4 removeAllObjects];
    
    
        NSMutableSet *set8 = [NSMutableSet setWithObjects:@"1",@"2",@"3", nil];
    
        NSMutableSet *set9 = [NSMutableSet setWithObjects:@"2",@"3",@"4", nil];
    
    6.獲取到兩個集合的并集最后賦值給set8

        [set8 unionSet:set9];
    
    7.獲取到兩個集合的交集最后賦值給set8

        [set8 intersectSet:set9];
    
    
    8.從一個集合中減去另一個集合,就是從集合中移除這兩個集合的交集,最終賦值給set8


        [set8 minusSet:set9];
    
    9. 給集合重新賦值

        [set8 setSet:set9];
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容