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);
时间: 2024-07-31 07:19:20

IOS数组NSArray与NSMutableArray知识点的相关文章

Objective-C数组 NSArray与NSMutableArray的区别 NSDictionary与 NSMutableDictionary 的区别 == int,NSInteger,NSUIn

Objective-C数组相关操作. // insert code here... NSLog(@"数组"); //指定多个字符串创建数组 NSArray *array; array=[NSArrayarrayWithObjects:@"0-asd",@"1-fds",@"2-哈咯",@"3-个人",nil]; //数组的长度 NSLog(@"数组长度%d",array.count);

iOS - 数组(NSArray)

1. 数组的常用处理方式 //--------------------不可变数组 //1.数组的创建 NSString *s1 = @"zhangsan"; NSString *s2 = @"lisi"; NSString *s3 = @"wangwu"; //(1) NSArray *array1 = [[NSArray alloc] initWithObjects:s1,s2,s3, nil]; NSLog(@"%@",a

Objective-C学习-数组 NSArray 和 NSMutableArray(欢迎提意见)

在学习 Objective-C的过程中,感觉数组在这一个学习方面是一个比较大的应用域,所以写这篇随笔来总结一下. 首先声明的是,与C语言的数组不同,Objective-C的是数组只能用来存储对象,而不是存储int .double.char等基础数据类型,一般要存这些基础数据类型,对于我这个刚学 Objective-C的新手来说,我的做法是将有关数字的基础类型 如 int .double.char首先转换成一个叫做 NSNumber的类  char*类型的转换成  Objective-C的字符串

IOS数组、字典、NSNumber 新写法—— @[]、@{}

IOS数组.字典.NSNumber 新写法—— @[].@{} //标准写法 NSNumber * number = [NSNumber numberWithInt:1]; NSArray * array = [NSArray arrayWithObjects:@"one", @"two", nil]; NSDictionary * dict = [NSDictionary dictionaryWithObjectsAndKeys:@"value1&quo

ios数组字典混合运用

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //数组 NSArray *arr=@[@"1",@"2",@"3",@"4"]; //数组中有数组 NSArray *arr2=[NSMutableArray arrayWithArray:@[ @[@"A1&quo

IOS阶段学习第15天笔记(NSArray与NSMutableArray 数组)

IOS学习(OC语言)知识点整理 一.OC中的数组 1)数组:也是一个对象,数组中存放的是对象的地址,可以存放任意类型对象的地址,只能是对象不能是具体的数值,数组是有序的,      可以存放重复的元素,数组也分为不可变数组和可变数组.       1.不可变数组NSArray:初始化之后不能修改数组的内容       2.可变数组NSMutableArray:可以随时修改数组的内容(增加元素.删除元素.修改元素) 二.NSArray数组的操作 1)NSArray数组的创建 1.创建方法一:使用

iOS - 数组与字典(NSArray &amp; NSDictionary)

1. 数组的常用处理方式 //--------------------不可变数组 //1.数组的创建 NSString *s1 = @"zhangsan"; NSString *s2 = @"lisi"; NSString *s3 = @"wangwu"; //(1) NSArray *array1 = [[NSArray alloc] initWithObjects:s1,s2,s3, nil]; NSLog(@"%@",a

IOS开发之旅-IOS常用数据结构NSArray、NSMutableArray、NSDictionary、NSMutableDictionary介绍

NSArray NSArray基本用法 void arrayTest1() { //数组初始化最后必须以nil结尾,表示数组元素结束 NSArray *array1 = [[NSArray alloc]initWithObjects:@"item0",@"item1",@"item2",@"item3",@"item4",nil]; NSLog(@"%@",array1); /*( it

NSArray与NSMutableArray 数组与可变数组的创建和遍历 复习

1.NSArray 是一个父类,NSMUtableArray是其子类,他们构成了OC的数组. 2.NSArray的创建 NSArray * array = [[NSArray alloc]initWithObjects:@"one",@"two",@"three",@"four good",nil];//用对象初始化一个数组,这里是任意四个对象,不一定是字符串.//OC中的数组,不是真正的数组,这是一个链表,nil的作用正是表