OC-字符串、数组、字典总结

回眸只為那壹抹淺笑 提交于 2020-04-03 10:22:46

 

 

#import <Foundation/Foundation.h>

/*

∆以NSMutable开头的都是可变类型,以NSMutable开头定义的对象都是可以对数据进行修改;

 

        NSString //不可变字符串

        NSMutableString//可变字符串

 

        NSArray// 不可变数组

        NSMutableArray//可变数组

 

        NSDictionary//不可变字典

        NSMutableDictionary//可变字典

 

 可变的意思是可以对这个类型定义的变量进行修改或者删除操作

*/

 

 

int main(int argc, const char * argv[]) {

    @autoreleasepool {

        

/*************************    总结:字符串    **********************************/

 

        //==============    NSString     ===========================

        

        NSString *str = [[NSString alloc] init];

        

        //初始化=====================

        NSString *str0 = @"Hello World";

        NSString *str1 = [[NSString alloc] initWithFormat:@"%@",str0];

        

        //字符串万能拼接  =====================

       NSString *st = [NSString stringWithFormat:@"%@%@",str0,str1];

        

        //求字符串长度------使用length  =====================

        NSUInteger length = [st length];

        

        //字符串的转化  =====================

        int a = [@"123" intValue];

        long long b = [@"123456789987654321" longLongValue];

        float c = [@"0.123" floatValue];

        

        //字符串分割  =====================

        //【注】字符串分割要在字符串有效长度范围内

        NSString* tempStr = @"hello world,my name is kity";

        

        NSString* FStr = [tempStr substringFromIndex:5];

        NSString* FStr1 = [tempStr substringToIndex:5];

        

        NSRange range = {2,3};

        NSString* FStr2 = [tempStr substringWithRange:range];

        

        //以空格对字符串进行分割

   NSLog(@"%@",[tempStr componentsSeparatedByString:@" "]);  

        NSArray* lrcArray = [tempStr componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" "]];

        

        //字符串的比较  =====================

        NSString *tem1 = @"abc";

        NSString *tem2 = @"bcd";

        if ([tem1 isEqualToString:tem2]) {

            NSLog(@"==");

        }else{

            NSLog(@"!=");

        }

        

        NSComparisonResult result = [tem1 compare:tem2];

        if (result == NSOrderedAscending) {    //递增

            NSLog(@"tem2 > tem1");

        }

        else if (result == NSOrderedDescending)   //递减

        {

            NSLog(@"tem2 < tem1");

            

        }else if (result == NSOrderedSame)

        {

            NSLog(@"tm2 == tem1");

        }

        

        //BOOL 读作布尔类型,只有2种状态,真或者假,可以用1、0也可以用yes 、no

        //字符串前缀和后缀判断  =====================

        NSString* string = @"http://www.baidu.com";

        BOOL have = [string hasPrefix:@"http://"];

        if (have == YES) {

            NSLog(@"是http://开头");

        }

        else

        {

            NSLog(@"不是http://开头");

        }

        

        BOOL havejiewei = [string hasSuffix:@"com"];

        if (havejiewei) {

            NSLog(@"是com结尾");

        }

        else

        {

            NSLog(@"不是com结尾");

        }

        

        //字符大小写转换  =====================

        //转成大写

        NSLog(@"%@",[string uppercaseString]);

        

        //转成小写

        [string lowercaseString];

        

        //所有单词首字母大写

        [string capitalizedString];

        

        //查找字符串中的某个字符串,进行替换,第一个参数是要查找的字符串,第二个字符串为需要替换成的字符串

        string = [string stringByReplacingOccurrencesOfString:@"www" withString:@"googl"];

        NSLog(@"%@",string);

        

        

        //==============   NSMutableString     ===========================

 

        NSMutableString* m_str = [[NSMutableString alloc]initWithString:@"ceshishuju"];

        //字符串的修改

        [m_str setString:@"hello world"];

        

        //字符串的追加

        [m_str appendFormat:@" nihao"];

        

        //字符串的删除

        NSRange rang = {1,2};

        [m_str deleteCharactersInRange:rang];

        

        //字符串的插入

        [m_str insertString:@"xijinping" atIndex:3];

        

        NSLog(@"%@",m_str);

        

        /*************************    总结:数组    **********************************/

 

//oc中可以把NSObject对象的子类放到数组这个集合中,但是int、float、double等基础数据类型需要先进行转换才可以存入数组。

// oc中数组以NS开头,其中分为可变数组和不可变数组;

        

        //==============     NSArray     ===========================

 

        //数组初始化之后,不能对其进行增删改的数组,是不可变数组,不可变数组的数据只有第一次初始化的时候给赋值,之后不允许进行增删改;可以理解为是一种只读做用;

        NSArray *arr = [[NSArray alloc] init];

        //数组初始化  =====================

        NSArray *arr1 = @[@"hello",@"111",@"你好",@"good"];

        NSArray *arr2 = [[NSArray alloc] initWithArray:arr];

        //数组中初始化时可以放任何对象,给它分配内存并初始化值,最后一个nil结尾一定不要省略。

        NSArray *arr3 = [[NSArray alloc] initWithObjects:@"hello",@"111",@"你好",@"good", nil];

        

        //取元素  =====================

        NSLog(@"%@",[arr objectAtIndex:0]);//0表示第0个位置的元素

        //取数组元素个数

        NSLog(@"%ld",[arr1 count]);

        

        //遍历数组  =======================

        for (int i=0; i<[arr count]; i++) {

            

            NSLog(@"%@",[arr objectAtIndex:i]);

        }

        //oc中遍历数组有一个更简单的方法

        //这个语法就是for(in)语法,for循环先去判断NSString* str 是否在arr中,如果在,则继续循环

        //数组会遍历arr的元素个数次

        for (NSString* str in arr) {

            NSLog(@"%@",str);

        }

        //优缺点比对

        //第一种写法方便遍历指定元素,但写起来繁琐。

        //第二种写法简洁,并且不会出现数组越界导致程序崩溃的问题

        //这2种方式互补,某一些情况下必须用第一种方式才能解决。

        //==============================================

        

        

        //==================     NSMutableArray     ===========================

        

        //NSMutableArray 为可变数组,可以进行增删改

        //初始化

        NSMutableArray *muArr = [[NSMutableArray alloc] init];

        

        //增加元素(可以添加任何对象)============

        [muArr addObject:@"12"];

        [muArr addObject:@"hello"];

        [muArr addObject:@"你好"];

        //插入一个元素,在索引值是0的位置,原来元素位置后移

        [muArr insertObject:@"haha" atIndex:0];

        

        //修改元素==================

        //交换数组元素

        [muArr exchangeObjectAtIndex:0 withObjectAtIndex:1];

        //替换元素 用999这个对象值来替换掉第0个元素的值

        [muArr replaceObjectAtIndex:0 withObject:@"999"];

        

        //删除元素==================

        //删除下标索引值是0的元素

        [muArr removeObjectAtIndex:0];

        //删除数组元素中最后一个元素

        [muArr removeLastObject];

        //清空数组  删除数组中所有元素

        [muArr removeAllObjects];

        

        //判断是否包含某一个对象================

        BOOL isContain = [muArr containsObject:@"999"];

        if (isContain) {

            NSLog(@"包含");

        }

        else

        {

            NSLog(@"不包含");

        }

        //取数组中的元素===================

        //取元素

        //【注】严禁数组越界

        [muArr objectAtIndex:0];

        

        /*************************    总结:字典    **********************************/

 

        //==================     NSDictionary     ===========================

        

        //NSDictionary创建的字典对象,初始化value 和 key;这是一个不可变字典,初始化之后数据不可以修改

        

        //初始化(字典可以存任何对象,包括字符串、数组.....)  =====================

        NSDictionary *dic = [[NSDictionary alloc]init];

        NSDictionary *dic1 = @{@"key":@"value", @"i am key":@"i am value"};

        NSDictionary *dic2 = [[NSDictionary alloc]initWithObjectsAndKeys:@"One", @"1", @"Two", @"2", nil];

        

/*    =====================

字典中的数据以键值对的方式进行存储

@“One”和@“1”组成了一个键值对

@“1”称为键(key)

@“One”称为值(value)

值是需要存储的数据,键是寻找数据的索引

字典的作用,就是通过键,快速的查找到值。

值可以重复,键是唯一的。

字典中的键值对没有顺序,没有所谓第一个键值对,第二个键值对

键和值都是任意对象,字典中存储对象的地址。不过键往往使用字符串

 

*/

        //通过传入键,返回值的地址==================

        NSString * value = [dic1 objectForKey:@"3"];

        value = dic1[@"3"];

 

        //返回键值对总数

        NSUInteger count = [dic count];

        NSLog(@"%lu", count);

        

        //返回所有的键

        NSArray * keys = [dic2 allKeys];

        //返回所有的值

        NSArray * values = [dic2 allValues];

        

        //遍历字典   ===================

        for (NSString * key in dic2) {

            //每次循环key指向一个键

            //通过遍历键,间接遍历了值

            NSLog(@"%@", dic2[key]);

        }

        

        //==================     NSMutableDictionary     ===========================

 

        NSMutableDictionary *muDic = [[NSMutableDictionary alloc] init];

        //重置字典  =====================

        [muDic setDictionary:@{@"1" : @"One", @"2" : @"Two", @"3" : @"Three"}];

        

        //增

        [muDic setObject:@"Four" forKey:@"4"];

        

        //删

        //通过键删除值

        [muDic removeObjectForKey:@"3"];

        //通过多个键,删除多个值

        [muDic removeObjectsForKeys:@[@"1", @"2", @"3"]];

        //删除所有键值对

        [muDic removeAllObjects];

        

/*

 *************************    总结:创建枚举器    **********************************

  例如:创建学生对象

 

             //数组排序 描述器

             

             student* st1 = [[student alloc]init];

             st1.name = @"jack";

             st1.score = 90;

             

             student* st2 = [[student alloc]init];

             st2.name = @"jack";

             st2.score = 99;

             

             student* st3 = [[student alloc]init];

             st3.name = @"brady";

             st3.score = 98;

             

             //第一步

             //把需要排序的对象放入数组

             NSArray* sortArr = [[NSArray alloc]initWithObjects:st1,st2,st3,nil];

             

             //第二步

             //创建排序规则 需要用到NSSortDescriptor

             //【注】排序规则(desc),可以创建至少1个

             //【注】当有多个规则时,先按照第一个规则进行排序,再按照第二个规则进行排序  // YES为升序 <--> NO为降序

             NSSortDescriptor* desc = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];

             NSSortDescriptor* desc_score = [NSSortDescriptor sortDescriptorWithKey:@"score" ascending:NO];

             

             //第三步

             //把创建的规则放入数组

             NSArray* ruleArr = [[NSArray alloc]initWithObjects:desc,desc_score, nil];

             

             //第四步

             //用需要排序的数组sortArr 调用方法进行排序

             NSArray* newArr = [sortArr sortedArrayUsingDescriptors:ruleArr];

             

             for (student* stu in newArr) {

             NSLog(@"%@ %d",stu.name,stu.score);

             }

             

             //比较字符串,比较的就是字符中每一个字母的ASCII值

 

 

*/

        

    }

    return 0;

}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!