博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day4_2: 数组NSArray NSMutableArray、值对象NSNumber、NSValue
阅读量:4220 次
发布时间:2019-05-26

本文共 6252 字,大约阅读时间需要 20 分钟。

数组-有序集合

 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 
#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;}

转载地址:http://coxmi.baihongyu.com/

你可能感兴趣的文章
【HTML5/CSS/JS】开发跨平台应用工具的选择(三)
查看>>
【React Native】Invariant Violation: Application AwesomeProject has not been registered
查看>>
【ReactNative】真机上无法调试 could not connect to development server
查看>>
【XCode 4.6】常用快捷键 特别是格式化代码ctrl+i
查看>>
【iOS游戏开发】icon那点事 之 图标设计(三)
查看>>
【IOS游戏开发】之测试发布(Distribution)
查看>>
【IOS游戏开发】之IPA破解原理
查看>>
【一天一道LeetCode】#45. Jump Game II
查看>>
【一天一道LeetCode】#56. Merge Intervals
查看>>
【一天一道LeetCode】#59. Spiral Matrix II
查看>>
【一天一道LeetCode】#60. Permutation Sequence.
查看>>
论文浅尝 | 通过共享表示和结构化预测进行事件和事件时序关系的联合抽取
查看>>
廖雪峰Python教程 学习笔记3 hello.py
查看>>
从内核看epoll的实现(基于5.9.9)
查看>>
python与正则表达式
查看>>
Linux文件和设备编程
查看>>
文件描述符
查看>>
终端驱动程序:几个简单例子
查看>>
HTML条件注释
查看>>
内核态与用户态
查看>>