美文网首页
Object-C array dictionary string

Object-C array dictionary string

作者: ghost__ | 来源:发表于2018-04-02 21:17 被阅读25次

    数据类型一:array

    有序元素的集合。元素必须由对象组成,不能包含基本数据类型。

    1.不可变数据 NSArray
    创建:NSArray *array = @[@1,@1,@2];
    #1.取元素
    NSString *str = array[0]; 
    NSString *str =[array objectAtIndex:0];
    
    #2.添加元素 不可变数组没法在原有基础上添加新的元素  
    如果要较真 那可以这样
    array = [array arrayByAddingObject:@"176"];
    或者:
    array = [array arrayByAddingObjectsFromArray:@[@18,@19]];
    这两种方式看起来好像是添加了新的元素
    实际上是创建了一个新的数组  让array指向了一个新的内存空间 释放了原指向空间
    
    #3.将各元素拼接成字符串
    NSString *str = [array componentsJoinedByString:@"/"];
    
    #4.判断是否包含指定元素
    [array containsObject:@1]
    
    #5.判断两个数组是否一样
    [array isEqualToArray:[NSArray array]]; //这里判断的是两个数组的值是否相等 而非引用(即地址)
    
    #6.取数组的第一个元素与最后一个元素
    arrar.firstObject
    arrar.lastObject
    
    #7.排序
    方式1:array = [array sortedArrayUsingSelector:@selector(compare:)];//返回新数组   升序 按照ASCII比较
    方式2:
    array = [array sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
            NSComparisonResult result = [obj1 compare:obj2];
            //obj1 compare obj2 是正序排列
            //obj2 compare obj1 是倒序排列
            return result;
        }];
    有一点注意的东西  这种单纯的比较数据类型提前处理好 统一
    方式3:描述法排序  这种比较适合对自定义对象的比较 多条件比较 由第一描述开始判断 如果有结果则直接返回结果  如果相等则继续判断第二描述  依次类推
    对象:
    Penson *p = [Penson new];
    p.age = 27;p.workyear = 3;
    NSArray *pensons = @[p,p,p,p];
    //描述条件一 NO 降序
    NSSortDescriptor *age = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO];
    //描述挑那间二 YES 升序
    NSSortDescriptor *workyear = [NSSortDescriptor sortDescriptorWithKey:@"workYear" ascending:YES];
    //采取哪些描述进行排序 得到最后结果
    pensons = [self.pensons sortedArrayUsingDescriptors:@[age, workyear]];
    
    #8.遍历
    for (int i = 0; i < 10;i ++) {}
    for (id value in array) { }
    [array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {  }];
    
    #9.让数组中每一个元素都执行一遍方法
     [arr makeObjectsPerformSelector:@selector(function)];//function是元素对象有的方法
     [arr makeObjectsPerformSelector:@selector(function:) withObject:@100];//function:是元素对象有的方法 withObject:传递的参数
    例:[self.view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
    #注意点:不可变数组 无法修改元素值与删除元素 严格意义也无法添加新元素
    
    2.可变数组 NSMutableArray
    上面的不可变数组的使用方法 可变数组都可以使用
    创建:NSMutableArray *array = [NSMutableArray array];
    #1.添加元素
    [array addObject:@13];
    [array addObjectsFromArray:@[@14,@19,@20]];
    
    #2.改变元素的值 replace.....
    array[0] = @"newAdd";//直接赋值
    [array replaceObjectAtIndex:0 withObject:@190];//根据指定下标
    [array replaceObjectsInRange:NSMakeRange(0, 2) withObjectsFromArray:@[@1000,@2000]];//根据指定range
    [array replaceObjectsInRange:NSMakeRange(0, 2) withObjectsFromArray:@[@"message",@"test",@"value"] range:NSMakeRange(1, 2)];//根据指定range 
    
    #3.删除 remove.....
    [array removeObject:@19];//移除指定元素
    [array removeObjectAtIndex:0]; //移除指定下标
    [array removeAllObjects];//移除全部元素
    

    数据类型二:字典 dictionary

    使用 hash表来实现key和value之间的映射和存储 字典是无序的

    1.不可变字典 NSDictionary
    创建:NSDictionary *dict = @{@"key":@"value"};
    #1.取值
    dict[@"key"];
    [dict objectForKey:@"key"];
    
    #2.获取所有key  所有value
    dict.allKeys dict.allValues  
    //可以通过获取的keys  values  判断是否包含某个元素  并且将value拼接成字符串  key拼接成字符串
    
    #3.字典比较
    [dict isEqualToDictionary:[NSDictionary new]];//值比较
    
    #4.遍历
    [dict enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {    }];//常用方式
    
    #5.排序
    无序  下面是一个思路 可以按照一定规律 转换成其它类型
    -  (NSString *)stringWithDict:(NSDictionary *)dict{
        NSArray *sortedArray = [dict.allKeys sortedArrayUsingComparator:^NSComparisonResult(id obj1,id obj2) {
            return[obj1 compare:obj2 options:NSNumericSearch];//正序
        }];
        
        NSString *str =@"";
        for(NSString*categoryId in sortedArray) {
            id value = [dict objectForKey:categoryId];
            
            if([value isKindOfClass:[NSDictionary class]]) {
                value = [self stringWithDict:value];
            }
            
            if([str length] !=0) {
                str = [str stringByAppendingString:@","];
            }
            str = [str stringByAppendingFormat:@"%@:%@",categoryId,value];
        }
        NSLog(@"str:%@",str);
        return str;
    }
    
    2.可变字典 NSMutableDictionary
    上面的不可变字典的使用方法 可变字典都可以使用
    创建:NSMutableDictionary *nmDict = [NSMutableDictionary dictionary];
    #1.添加元素
    [nmDict setValue:@"value1" forKey:@"key1"];//找到key赋值 找不到添加
    [nmDict addEntriesFromDictionary:@{@"key2":@"value2"}];
    
    #2.改变元素的值
    nmDict[@"key1"] = @"message";//重新赋值
    [nmDict setValue:@"value1" forKey:@"key1"];//找到key赋值 找不到添加
    
    #3.删除 remove.....
    [nmDict removeObjectForKey:@"key1"];//移除指定key
     [nmDict removeAllObjects];//移除所有
    

    数据类型三:string

    1.不可变字符串 NSString
    创建:NSString *str = @"message";
    #1.获取字符串指定下标字符
    //方式一
    unichar s = [str characterAtIndex:1];
    NSString *newcharStr = [NSString stringWithFormat:@"%C",ch];//将unichar转化为string
    //方式二 
    [str substringWithRange:NSMakeRange(0, 1)];//获取下标为0的字符
    
    #2.字符串截取
    [str substringToIndex:2]//从开始截取2位
    [str substringFromIndex:4]//从下标为4的位置 截取到最后
    [str substringWithRange:NSMakeRange(0, 1)]//截取指定区域字符串
    
    #3.字符串的比较
    //严格模式
    NSComparisonResult result = [str compare:@"aaa"];
    
    //options 怎么比 这里选的不区分大小写
    NSComparisonResult result = [str compare:@"aaa" options:NSCaseInsensitiveSearch];
    /**
    NSComparisonResult:
    NSOrderedAscending//后面比前面小
     NSOrderedSame//一样大
     NSOrderedDescending//后面比前面大
    */
    
    [str isEqualToString:@"aaa"];//比较值是否相等 区分大小写
    
    #4.判断字符串是否包含指定字符窜
    [str hasPrefix:@"m"] //头部是否包含
    [str hasSuffix:@"e"] //尾部是否包含
    [containsString:@"ss"]//不分位置 包含则返回YES  ios8later
    
    #5.获取指定字符串  在原字符串中位置
    NSRange range = [rangeOfString:@"me"];
    NSRange range = [rangeOfString:@"me" options: NSCaseInsensitiveSearch];//options 怎么比 这里选的不区分大小写
    
    #6.拼接字符串
    [str stringByAppendingString:@"newString"];
    [str stringByAppendingFormat:@"%@", @"newString"]; 
    
    #7.基础类型转换
    @property (readonly) double doubleValue;
    @property (readonly) float floatValue;
    @property (readonly) int intValue;
    @property (readonly) NSInteger integerValue API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
    @property (readonly) long long longLongValue API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
    @property (readonly) BOOL boolValue
    
    #8.大小写
    @property (readonly, copy) NSString *uppercaseString;//全部大写
    @property (readonly, copy) NSString *lowercaseString;//全部小写
    @property (readonly, copy) NSString *capitalizedString;//首字母大写
    
    #9.空格与换行符
    //去掉所有空格与换行
      str = [str stringByReplacingOccurrencesOfString:@" " withString:@""];  
        str = [str stringByReplacingOccurrencesOfString:@"\r" withString:@""];  
        str = [str stringByReplacingOccurrencesOfString:@"\n" withString:@""];  
    
    //去掉首位空格
    str = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 
    
    //去掉首位空格与换行
    str = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet ]];
    
    #10.字符串切割成数组
      NSArray *array = [str componentsSeparatedByString:@","];// 以,为分隔符进行切割
    

    2.可变字符串

    创建:NSMutableString *str = [NSMutableString string];
    #1.添加字符串
    [str appendString:@"message"];
    [str appendFormat:@" %@",@"new"];
    [str insertString:@"aString" atIndex:3];//插入字符串到指定位置
    
    #2.替换字符
    [str replaceCharactersInRange:NSMakeRange(0, 3) withString:@"MES"];//替换指定区域
    [str replaceOccurrencesOfString:@"AGE" withString:@"AGE" options:NSCaseInsensitiveSearch range:NSMakeRange(0, str.length)];//在全区域内搜寻 替换指点字符串 不区分大小写
    
    #3.删除
    [str deleteCharactersInRange:NSMakeRange(0,2)];
    

    相关文章

      网友评论

          本文标题:Object-C array dictionary string

          本文链接:https://www.haomeiwen.com/subject/rchxhftx.html