day4_2: 数组NSArray NSMutableArray、值对象NSNumber、NSValue

本文详细介绍iOS开发中数组的使用方法,包括初始化、访问元素、添加删除及替换元素等操作,并介绍如何利用语法糖简化代码。此外,还讲解了基本类型与对象类型之间的转换。

数组-有序集合
 IOS中存放数据的容器类都称为集合(collection)
 数组是有序结合  只能存放对象
 数组有下标(index)的概念,靠index来索引元素,下标从0开始
 数组分不可变数组(NSArray)和可变数组(NSMutableArray)
 @[@"abc",@"erf"] 这个语法糖返回的是不可变数组
 
 不可变数组里的元素只可以读取,不可以写入


涉及知识点:

1、数组的初始化,建议使用语法糖
 2、取数组中元素个数方法 Count 返回值为无符号长整型
 3、访问数组中元素:str = [arr objectAtIndex:2],类似于str = arr[2];
 4、可变数组元素的初始化:
    实例方法: initWithObjects:
    类方法: arrayWithObjects:
 5、可变数组中添加元素:addObject:
 6、可变数组中指定位置插入元素:insertObject:@"bobo" atIndex:0
 7、可变数组中删除元素:removeObject:
 8、可变数组中替换元素:replaceObjectAtIndex:1 withObject:@"kevin"
 9、可变数组中交换两个元素的位置:exchangeObjectAtIndex:0 withObjectAtIndex:1
 10、数组元素遍历的两种方法
 11、把基本类型转换为对象类型  numberWith开头,如:
     numberWithBool;
     numberWithFloat;
     numberWithInt;
     numberWithChar;
     ...
 
 12、对象类型转换成基本数据类型
     boolValue;
     intValue;
     floatValue;
     doubleValue;
     rangeValue;
     ...·
 
 13、NSNumber 语法糖
     NSNumber * num5 = [NSNumber numberWithInt:8];
     NSNumber * num6 = @8; //将int类型转换成NSNumber对象
     NSNumber * num7 = @2.3;   //将double类型转换成NSNumber对象
     NSNumber * num8 = @YES;   //将BOOL类型转换成NSNumber对象
     NSNumber * num9 = @'c';   //将char类型转换成NSNumber对象
 
 14、结构体转换成对象类型:
     NSValue * value = [NSValue valueWithRange:range]
 
 15、对象类型转换为结构体类型
     NSRange range2 = [value rangeValue];
     NSLog(@"range2 = %@",NSStringFromRange(range2));
 
 16、字符串以某个字符分隔开,然后存储到数组中
     NSString *str5 = @"abc,def,ghi";
     NSArray *arr5 = [str5 componentsSeparatedByString:@","];
 
 17、数组转换为字符串(拼接):
     str5 = [arr5 componentsJoinedByString:@"."];
 
 18、删除数组中的元素:
     删除数组中的一个元素:
        removeObjects:
     删除数组中多个元素,删除的多个元素在另一个数组里:
        removeObjectsInArray:
     NSArray * delArr = @[p4,p5,p6];
     [mArr5 removeObjectsInArray:delArr];


main.m

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[]) {
    
    //-----1.1--初始化方法创建数组-----
    // nil相当于\0的作用,表示访问到这里就结束了,不再访问后面的数组元素
    NSArray * arr = [[NSArray alloc]initWithObjects:@"zero",@"hour",@"学辉", nil];
    NSLog(@"%@",arr);
    
    NSArray * arr2 = @[@"Frank",@"bobo",@"Duke"];
    NSLog(@"%@",arr2);
    
    NSArray * arr3 = [NSArray arrayWithObjects:@"张三",@"李四",@"王五", nil];
    NSLog(@"%@",arr3);
    
    //不常用的方法:
    NSArray * arr4 = [NSArray arrayWithObject:@"tom"];
    NSLog(@"%@",arr4);
    
    //-----1.2-- 获取数组元素个数的方法:-------
    NSUInteger arrCount = [arr2 count];
    //int count = (int)[arr2 count]; //错误写法,这样会损失精度
    NSLog(@"%lu",arrCount);
    
    //-----1.3--访问数组元素,arr[2]等价于下面的代码-------
    // 获取对应索引的元素
    NSString *str = [arr objectAtIndex:2];
    NSLog(@"%@",arr[2]);//不安全
    NSLog(@"%@",str);
    
    //-----2.1--可变元素的初始化-------
    NSMutableArray *mArr = [[NSMutableArray alloc]initWithObjects:@"zero",@"hour", nil];
    NSLog(@"%@",mArr);
    
    //-----2.2--可变数组中元素的添加-------
    
    //可以接受自己所有特有的消息,添加数组元素(特有的方法)
    [mArr addObject:@"bobo"];
    NSLog(@"%@",mArr);
    
    //在数组mArr的第0个位置添加@"bobo"元素。
    [mArr insertObject:@"bobo" atIndex:0];
    NSLog(@"%@",mArr);
    
    //-----2.3--删除数组元素(由于后面的代码会用到mArr,这里先注释起来)-------
//    [mArr removeObject:mArr[0]];
//    [mArr removeObject:@"bobo"];
//    NSLog(@"%@",mArr);
    
    //-----2.4--替换元素  这里的1是指数组的下标-------
    [mArr replaceObjectAtIndex:1 withObject:@"kevin"];
    NSLog(@"%@",mArr);
    
    //-----2.5--交换两个元素-------
    [mArr exchangeObjectAtIndex:0 withObjectAtIndex:1];
    NSLog(@"%@",mArr);
    
    //-----2.6--可变数组元素的输出------
    NSMutableArray * names = [NSMutableArray arrayWithObjects:@"张三",@"李四",@"王五", nil];
    NSLog(@"names = %@",names);
    
    //第一种遍历
    for (int i=0; i<[names count]; i++) {
        NSLog(@"%@",names[i]);
    }
    
    //第二种遍历
    for (NSString * obj in names) {
        NSLog(@"%@",obj);
    }

    //*************************
    //第四部分
    //*************************
    
    //值对象
    //-------NSNumber----
    //-----3.1--把基本类型转换为对象类型--------
    /*
     + numberWithInt:
     + numberWithDouble:
     - intValue
     - doubleValue
     */
    NSNumber * num1 = [NSNumber numberWithBool:YES];
    NSNumber * num2 = [NSNumber numberWithChar:'a'];
    NSNumber * num4 = [NSNumber numberWithFloat:3.5];
    NSNumber * num3 = [NSNumber numberWithDouble:2.3];
    
    
    
    //-----3.2--OC数组当中不能存储基本数据类型-------
    
//    NSArray *arr = @[YES,2.3,5];//这样存储是错误的,OC数组当中不能存储基本数据类型
    
    NSArray *nArr = @[num1,num2,num3,num4];
    NSLog(@"%@",nArr);
    
    //-----3.3--对象类型转换成基本数据类型-------
    
    BOOL type1 = [num1 boolValue];
    char type2 =  [num2 charValue];
    float type3 = [num3 floatValue];
    double type4 = [num4 doubleValue];
//    NSArray * nArr2 = @[type1,type2,type3,type4];
    NSLog(@"%@",nArr);
    NSLog(@"%d, %c, %.2f, %.2f",type1,type2,type3,type4);
    
    //-----3.4--NSNumber的语法糖-------
    
    NSNumber * num5 = [NSNumber numberWithInt:8];
    NSNumber * num6 = @8; //将int类型转换成NSNumber对象
    NSNumber * num7 = @2.3;   //将double类型转换成NSNumber对象
    NSNumber * num8 = @YES;   //将BOOL类型转换成NSNumber对象
    NSNumber * num9 = @'c';   //将char类型转换成NSNumber对象
    NSLog(@"num5=%@, num6=%@, num7=%@, num8=%@, num9=%@ ",num5,num6,num7,num8,num9);
    
    
    
    
    
    
    //-----4--NSValue-------
    /*
     + valueWithRange: 
     + valueWithPointer:
     - rangeValue
     - pointerValue
     */
    //-----4.1--valueWithRange 结构体转换成对象类型-------
    
    //封装结构体为对象类型  结构体类型转换为对象目的是为了放到数组里
    NSRange range = NSMakeRange(1, 3); //实例化了一个结构体 初始化了一个结构体
    NSValue * value = [NSValue valueWithRange:range]; //转换成对象类型
    NSLog(@"%@",value);
    
    //-----4.2--rangeValue对象类型转换为结构体-------
    
    NSRange range2 = [value rangeValue];
    NSLog(@"%@",NSStringFromRange(range2));
    
    //-----4.3--componentsSeparatedByString: 字符串转换为数组---------
    
    //将字符串中以某个字符分隔,分隔后的字符串放在数组当中
    NSString *str5 = @"abc,def,ghi";
    NSArray *arr5 = [str5 componentsSeparatedByString:@","];
    NSLog(@"%@",arr5);
    
    //-----4.4---componentsJoinedByString: 数组转换为字符串---------
    
    str5 = [arr5 componentsJoinedByString:@"."];
    NSLog(@"%@",str5);
    
    
    //-----4.5--删除数组中指定素--------
    
    Person *p1 = [[Person alloc]init];
    Person *p2 = [[Person alloc]init];
    Person *p3 = [[Person alloc]init];
    Person *p4 = [[Person alloc]init];
    Person *p5 = [[Person alloc]init];
    Person *p6 = [[Person alloc]init];
    
    //removeObject:删除可变数组中的指定元素
    NSMutableArray *mArr5 = [NSMutableArray arrayWithObjects:p1,p2,p3,p4,p5,p6, nil];
    [mArr5 removeObject:p2];
    NSLog(@"mArr5 = %@",mArr5);
    for (int i=0;i<5;i++) {
        NSLog(@">> %@",mArr5[i]);
    }
    
    NSArray * delArr = @[p3,p4,p5,p6];
    [mArr5 removeObject:delArr];
    NSLog(@"---%@",mArr5);
    
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值