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 會有我的微信號,如果有問題你也可以在那找到我;當然不感興趣無視此信息;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM