Foundation常用类NSArray

NSArray用来存储对象的有序列表,它是不可变的

NSArray不能存储C语言中的基本数据类型,如int、float、enum、struct,也不能存储nil,nil代表数组元素的结束

  1. //  
  2. //  main.m  
  3. //  NSArray  
  4. //  
  5. //  Created by lixiaoqiang on 14/11/19.  
  6. //  Copyright (c) 2014年 lixiaoqiang. All rights reserved.  
  7. //  
  8.   
  9. #import <Foundation/Foundation.h>  
  10.   
  11. //数组的创建  
  12. void arrayCreate(){  
  13.     //创建一个空的数组  
  14.     NSArray *array = [NSArray array];  
  15.     //创建有1个元素的数组  
  16.     array = [NSArray arrayWithObject:@"123"];  
  17.     //创建有多个元素的数组,nil代表元素的结束  
  18.     array = [NSArray arrayWithObjects:@"a"@"b"@"c", nil nil];  
  19.     //查看元素个数  
  20.     int count = [array count]; //或者使用[array.count]  
  21. }  
  22.   
  23. //数组的简单使用  
  24. void arrayUse(){  
  25.     NSArray *array = [NSArray arrayWithObjects:@"a"@"b"@"c", nil nil];  
  26.     //判断是否包含了某个元素  
  27.     if([array containsObject:@"a"]){  
  28.         NSLog(@"包含了子元素a");  
  29.     }  
  30.     //获取数组最后一个元素  
  31.     NSString *last = [array lastObject];  
  32.     NSLog(@"最后一个元素是%@", last);  
  33.     //获取某个索引处的元素  
  34.     NSString *str = [array objectAtIndex:1];  
  35.     NSLog(@"索引是1的位置是%@", str);  
  36.     //判读元素的索引  
  37.     unsigned long index = [array indexOfObject:@"c"];  
  38.     NSLog(@"c的位置索引是%zi", index);  
  39. }  
  40.   
  41. //定义一个Student对象  
  42. @interface Student : NSObject  
  43. //添加两个属性  
  44. @property (nonatomicretainNSString *firstname;  
  45. @property (nonatomicretainNSString *lastname;  
  46.   
  47. + (id)student; //构造方法  
  48. + (id)studentWithFirstName:(NSString *)firstname lastname:(NSString *)lastname;  
  49. - (void)test;  
  50. //用于对象比较(返回值必须是NSComparisonResult类型)  
  51. - (NSComparisonResult) compareStudent:(Student *)stu;  
  52.   
  53. @end  
  54.   
  55. @implementation Student  
  56.   
  57. + (id)student{  
  58.     return [[[Student alloc] init] autorelease];  
  59. }  
  60. + (id)studentWithFirstName:(NSString *)firstname lastname:(NSString *)lastname {  
  61.     Student *stu = [[[Student alloc] init] autorelease];  
  62.     stu.firstname = firstname;  
  63.     stu.lastname = lastname;  
  64.     return stu;  
  65. }  
  66. - (void)test {  
  67.     NSLog(@"Student的test方法");  
  68. }  
  69.   
  70. - (NSComparisonResult)compareStudent:(Student *)stu{  
  71.     //按照姓进行排序  
  72.     return [self.lastname compare:stu.lastname];  
  73. }  
  74.   
  75. //相当于java的toString方法  
  76. - (NSString *)description{  
  77.     return [NSString stringWithFormat:@"[%@ %@]"self.lastnameself.firstname];  
  78. }  
  79.   
  80. - (void)dealloc{  
  81.     NSLog(@"%@被销毁了");  
  82.     [_firstname release];  
  83.     [_lastname release];  
  84.     [super dealloc];  
  85. }  
  86. @end  
  87.   
  88. //数组的内存管理  
  89. void arrayMemory(){  
  90.     Student *stu1 = [[Student alloc] init];  
  91.     Student *stu2 = [[Student alloc] init];  
  92.     Student *stu3 = [[Student alloc] init];  
  93.     NSLog(@"stu1:%zi", [stu1 retainCount]); //计数器为1  
  94.     //数组会对添加的对象做一次retain操作  
  95.     NSArray *array = [[NSArray alloc] initWithObjects:stu1, stu2, stu3, nil nil];  
  96.     NSLog(@"stu1:%zi", [stu1 retainCount]); //计数器为2  
  97.     NSLog(@"count=%zi", array.count);  
  98.     //数组被销毁的时候会对内部的所有元素都做一次release操作  
  99.     [array release];  
  100.     [stu1 release];  
  101.     [stu2 release];  
  102.     [stu3 release];  
  103. }  
  104.   
  105. void arrayMessage(){  
  106.     Student *stu1 = [Student student];  
  107.     Student *stu2 = [Student student];  
  108.     Student *stu3 = [Student student];  
  109.       
  110.     NSArray *array = [NSArray arrayWithObjects:stu1, stu2, stu3, nil nil];  
  111.     //让数组里面的所有对象调用test方法  
  112.     [array makeObjectsPerformSelector:@selector(test)];  
  113. }  
  114.   
  115. //遍历数组1  
  116. void arrayFor1(){  
  117.     NSArray *array = [NSArray arrayWithObjects:@"1"@"2"@"3", nil nil];  
  118.     //id == void * 代表任何类型的指针变量  
  119.     int count = array.count;  
  120.     for(int i=0; i<count; i++){  
  121.         id obj = [array objectAtIndex:i];  
  122.         NSLog(@"%i位置是%@", i, obj);  
  123.     }  
  124. }  
  125.   
  126. //遍历数组2  
  127. void arrayFor2(){  
  128.     NSArray *array = [NSArray arrayWithObjects:@"1"@"2"@"3", nil nil];  
  129.     for(id obj in array){  
  130.         NSLog(@"%@", obj);  
  131.     }  
  132. }  
  133.   
  134. //遍历数组3----Block  
  135. void arrayFor3(){  
  136.     NSArray *array = [NSArray arrayWithObjects:@"1"@"2"@"3", nil nil];  
  137.     [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOLBOOL *stop) {  
  138.         NSLog(@"%Zi位置是%@", idx, obj);  
  139.         if(idx == 1) *stop = YES//如果索引为1则停止遍历  
  140.     }];  
  141. }  
  142.   
  143. //遍历数组4----迭代器  
  144. void arrayFor4(){  
  145.     NSArray *array = [NSArray arrayWithObjects:@"1"@"2"@"3", nil nil];  
  146.     //获取数组的迭代器  
  147.     NSEnumerator *enumerator = [array objectEnumerator];  
  148.     //反向迭代器  
  149.     //NSEnumerator *renu = [array reverseObjectEnumerator];  
  150.     //获取下一个遍历的元素  
  151.     //[enumerator nextObject];  
  152.     id obj = nil;  
  153.     while(obj = [enumerator nextObject]){  
  154.         NSLog(@"%@", obj);  
  155.     }  
  156. }  
  157.   
  158. //派生出新的数组  
  159. void arrayNew(){  
  160.     //添加元素  
  161.     NSArray *array = [NSArray arrayWithObjects:@"1"@"2", nil nil];  
  162.     NSArray *array2 = [array arrayByAddingObject:@"3"];  
  163.     //裁剪元素  
  164.     NSRange range = NSMakeRange(12);  
  165.     [array2 subarrayWithRange:range];  
  166. }  
  167.   
  168. //数组的其他用法  
  169. void arrayOther(){  
  170.     //利用分隔符拼接  
  171.     NSArray *array = [NSArray arrayWithObjects:@"1"@"2"@"3"@"4", nil nil];  
  172.     NSString *str = [array componentsJoinedByString:@","];  
  173.     NSLog(@"%@", str); //1,2,3,4  
  174.     //数组写入文件  
  175.     NSArray *path = @"/user/apple/Desktop/array.xml";  
  176.     [array writeToFile:path atomically:YES];  
  177.     //从文件读出数组  
  178.     NSArray *array2 = [NSArray arrayWithContentsOfFile:path];  
  179. }  
  180.   
  181. //数组排序1  
  182. void arraySort1(){  
  183.     NSArray *array = [NSArray arrayWithObjects:@"3"@"1"@"4"@"2", nil nil];  
  184.     //指定元素的比较方法(compare:)  
  185.     NSArray *array2 = [array sortedArrayUsingSelector:@selector(compare:)];  
  186.     NSLog(@"array2:%@", array2);  
  187. }  
  188.   
  189. //数组排序2  
  190. void arraySort2(){  
  191.     Student *stu1 = [Student studentWithFirstName:@"sun" lastname:@"home"];  
  192.     Student *stu2 = [Student studentWithFirstName:@"dawan" lastname:@"ganban"];  
  193.     Student *stu3 = [Student studentWithFirstName:@"lxq" lastname:@"xsyu"];  
  194.       
  195.     NSArray *array = [NSArray arrayWithObjects:stu1, stu2, stu3, nil nil];  
  196.       
  197.     NSArray *array2 = [array sortedArrayUsingSelector:@selector(compareStudent:)];  
  198. }  
  199.   
  200. //数组排序3---Block排序  
  201. void arraySort3(){  
  202.     Student *stu1 = [Student studentWithFirstName:@"sun" lastname:@"home"];  
  203.     Student *stu2 = [Student studentWithFirstName:@"dawan" lastname:@"ganban"];  
  204.     Student *stu3 = [Student studentWithFirstName:@"lxq" lastname:@"xsyu"];  
  205.       
  206.     NSArray *array = [NSArray arrayWithObjects:stu1, stu2, stu3, nil nil];  
  207.     [array sortedArrayUsingComparator:^NSComparisonResult(Student *stu1Student *stu2) {  
  208.         return [stu1.lastname compare:stu2.lastname];  
  209.     }];  
  210. }  
  211.   
  212. //数组排序4,可以用来对对象嵌套排序 比如Student中有一个book对象就可以使用@"book.bookname"对书名排序  
  213. void arraySort4(){  
  214.     Student *stu1 = [Student studentWithFirstName:@"sun" lastname:@"home"];  
  215.     Student *stu2 = [Student studentWithFirstName:@"dawan" lastname:@"ganban"];  
  216.     Student *stu3 = [Student studentWithFirstName:@"lxq" lastname:@"xsyu"];  
  217.     //创建排序描述器  
  218.     NSSortDescriptor *descript = [NSSortDescriptor sortDescriptorWithKey:@"lastname" ascending:YES];  
  219.     NSArray *array = [NSArray arrayWithObjects:stu1, stu2, stu3, nil nil];  
  220.     //调用排序  
  221.     NSArray *array2 = [array sortedArrayUsingDescriptors:descript];  
  222. }  
  223.   
  224. int main(int argc, const charchar * argv[]) {  
  225.     @autoreleasepool {  
  226.         //arrayFor4();  
  227.     }  
  228.     return 0;  
  229. }  

NSMutableArray是可变数组,派生自NSArray,相关操作如下

  1. void arrayCreate(){  
  2.     NSMutableArray *array = [NSMutableArray arrayWithObjects:@"1"@"2", nil nil];  
  3.     [array addObject:@"3"];  
  4.     [array removeObject:@"3"];  
  5.       
  6.     [array removeLastObject];  
  7.     [array removeAllObjects];  
  8. }  
  9.   
  10. void arrayMemory(){  
  11.     //对被添加的元素做一次retain操作  
  12.     //[array addObject:stu1];  
  13.     //对被删除的元素做一次release操作  
  14.     //[array removeObject:stu1];  
  15.       
  16.     //当数组被释放的时候会对所有的元素做一次release操作  
  17.     //[array release];  
  18. }  
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
应用背景为变电站电力巡检,基于YOLO v4算法模型对常见电力巡检目标进行检测,并充分利用Ascend310提供的DVPP等硬件支持能力来完成流媒体的传输、处理等任务,并对系统性能做出一定的优化。.zip深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值