zoukankan      html  css  js  c++  java
  • IOS数组NSArray与NSMutableArray知识点

    此文是对数组NSArray与NSMutableArray知识点的总结,主要是一些常见的操作,别外一些操作见其相应的文档,下面的代码部分还运用的第三方插件BlocksKit相结合;

    a:Foundation中数组(NSArray)是有序的对象集合
    b:NSArray只能存储Objective-C的对象,而不能存储像int、float这些基本数据类型,但是Objective-C对C兼容,所以在Objective-C程序中,仍然可以使用C的数组来存储基本数据类型
    c:NSArray一旦创建便不可以再对它就进行更改,如果要进行对数组的增、删、改等操作的话,需要使用NSArray的子类NSMutableArray来创建对象

    1:NSArray一些常见操作

    NSArray *array=[NSArray array];
        //增加单个
        //array=[NSArray arrayWithObject:@"wujy"];
        //增加多个
        array=[NSArray arrayWithObjects:@"cnblogs",@".com",nil];
        NSInteger arrayCount=array.count;
        NSLog(@"当前array数组个数为:%ld",arrayCount);
        
        int i=0;
        for (id obj in array) {
            NSLog(@"当前第%d个为%@",i,obj);
            i++;
        }
        
        //常用的数组操作
        NSString *lastString=[array lastObject];
        NSLog(@"最后一个对象的值为:%@",lastString);
        
        NSString *firstString=[array firstObject];
        NSLog(@"第一个对象的值为:%@",firstString);
        
        NSString *indexString=[array objectAtIndex:1];
        NSLog(@"第二个对象的值为:%@",indexString);
        
        NSInteger indexInt=[array indexOfObject:@"cnblogs"];
        NSLog(@"返回索引的位置:%ld",indexInt);
        
        //将字符串转化成数组
        NSString *arrayString=@"a,b,c,d";
        NSArray *newArray=[arrayString componentsSeparatedByString:@","];
        for (id obj in newArray) {
            NSLog(@"当前字符串转化为%@",obj);
        }
        
        //判断数组是否存在元素
        if ([newArray containsObject:@"c"]) {
            NSLog(@"存在字母c的元素");
        }
        else
        {
            NSLog(@"不存在字母c的元素");
        }
        
        //简便创建
        NSArray *twoArray=[NSArray arrayWithObjects:@1,@2,@3,@4,@5,nil];
        //迭代器遍历  reverseObjectEnumerator数组元素从后向前访问
        NSEnumerator *arrayenumerator=[twoArray reverseObjectEnumerator];
        id obj=nil;
        while (obj=[arrayenumerator nextObject]) {
            NSLog(@"当前值为:%d",[obj intValue]);
        }
        
        
        
        
        //利用BlocksKit插件进行遍历
        NSArray *frArray=[NSArray arrayWithObjects:@(0.2),@(0.5),@(0.9),nil];
        [frArray bk_each:^(id obj) {
            NSLog(@"%@",obj);
        }];
        
        //跟数组项进行对比,若不存在则为空 存在则为符合的值
        id found=[frArray bk_match:^BOOL(id obj) {
            BOOL match=([obj floatValue]==0.5)?YES:NO;
            return match;
        }];
        NSLog(@"有符合的值:%@",found);
        
        id notFound=[frArray bk_match:^BOOL(id obj) {
            BOOL match=([obj floatValue]==0.7)?YES:NO;
            return match;
        }];
        NSLog(@"没有符合的值(nil):%@",notFound);
    
        //过滤数组
        NSArray *selectFound=[frArray bk_select:^BOOL(id obj) {
            BOOL match=([obj floatValue]>0.3)?YES:NO;
            return match;
        }];
        NSLog(@"当前过滤array数组个数为:%ld",selectFound.count);
        for (id obj in selectFound) {
            NSLog(@"当前符合为%@",obj);
        }
        
        //过滤数组 取相反
        NSArray *rejectFound=[frArray bk_reject:^BOOL(id obj) {
            BOOL match=([obj floatValue]>0.3)?YES:NO;
            return match;
        }];
        NSLog(@"当前取反array数组个数为:%ld",rejectFound.count);
        for (id obj in rejectFound) {
            NSLog(@"当前符合为(0.2符合)%@",obj);
        }
        
        //遍历数组 对每个值都进行修改 组成新的数组
        NSArray *mapFound = [array bk_map:^id(id obj) {
            return [obj stringByAppendingString:@".png"];
        }];
        for (id obj in mapFound) {
            NSLog(@"当前map %@",obj);
        }
        
        //合并数组的各项值
        //进行数组的合并 中间可以加分格符之类 (这边是前面加的一个|;合并后的字符串为:|cnblogs.com)
        NSString *concentrated = [array bk_reduce:@"|" withBlock:^id(id sum, id obj) {
            return [sum stringByAppendingString:obj];
        }];
        NSLog(@"合并后的字符串为:%@",concentrated);
        
        //相加  还有一个为整数型 bk_reduceInteger
        float value = [frArray bk_reduceFloat:0 withBlock:^CGFloat(CGFloat result, id obj) {
            return result + [obj floatValue];
        }];
        NSLog(@“合并后的frArray值为:%f",value);

    2:NSMutableArray一些常见的操作

    //从array转nsmutablearray
        NSArray *array=[[NSArray alloc] initWithObjects:@"wujy",@"cnblogs",nil];
        NSMutableArray *mutableArray=[NSMutableArray arrayWithArray:array];
        
        //创建NSMutableArray
        NSMutableArray *newMutableArray=[NSMutableArray array];
        [newMutableArray addObject:@"a"];
        [newMutableArray addObjectsFromArray:[[NSArray alloc] initWithObjects:@"b",@"c",@"d",@"e",nil]];
        //迭代器遍历  reverseObjectEnumerator数组元素从后向前访问
        NSEnumerator *arrayenumerator=[newMutableArray reverseObjectEnumerator];
        id obj=nil;
        while (obj=[arrayenumerator nextObject]) {
            NSLog(@"当前值为:%@",obj);
        }
        
        //创建NSMutableArray
        NSMutableArray *capacityArray=[[NSMutableArray alloc] initWithCapacity:5];
        [capacityArray addObjectsFromArray:[[NSArray alloc] initWithObjects:@1,@2,@3,nil]];
        NSLog(@"删除前(1,2,3):%@",capacityArray);
        //删除指定的元素
        [capacityArray removeObject:@3];
        NSLog(@"删除后(1,2):%@",capacityArray);
        //插入
        [capacityArray insertObject:@4 atIndex:2];
        NSLog(@"插入后的(1,2,4)%@",capacityArray);
        //插入多个
        NSIndexSet *set=[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 2)];
        [capacityArray insertObjects:[[NSArray alloc] initWithObjects:@5,@6,nil] atIndexes:set];
        NSLog(@"插入多个以后的(5,6,1,2,4):%@",capacityArray);
        
        //Blocks操作
        //过滤
        [capacityArray bk_performSelect:^BOOL(id obj) {
            BOOL match=([obj intValue]>2)?YES:NO;
            return match;
        }];
        NSLog(@"过滤后的数组值为(5,6,4):%@",capacityArray);
        
        //取反过滤
        [capacityArray bk_performReject:^BOOL(id obj) {
            BOOL match=([obj intValue]>5)?YES:NO;
            return match;
        }];
        NSLog(@"过滤取反后的数组值为(5,4):%@",capacityArray);
        
        //对数组的值进行操作
        [capacityArray bk_performMap:^id(id obj) {
            return [NSNumber numberWithInt:[obj intValue]+1];
        }];
        NSLog(@"map后的数组值为(6,5):%@",capacityArray);

    最近有个妹子弄的一个关于扩大眼界跟内含的订阅号,每天都会更新一些深度内容,在这里如果你感兴趣也可以关注一下(嘿对美女跟知识感兴趣),当然可以关注后输入:github 会有我的微信号,如果有问题你也可以在那找到我;当然不感兴趣无视此信息;

  • 相关阅读:
    单相全桥逆变电路工作过程
    单片机实用工具大全
    电路元件
    IC SPEC相关数据
    庖丁解牛,经典运放电路分析
    microstrip(微带线)、stripline(带状线) 指什么?
    [转]关于时钟线/数据线/地址线上串联电阻及其作用
    正激变换电路工作原理
    从Buck-Boost到Flyback
    [转载].关于耦合电容、滤波电容、去耦电容、旁路电容作用
  • 原文地址:https://www.cnblogs.com/wujy/p/4651907.html
Copyright © 2011-2022 走看看