OC语言 集合>>不可变数组(NSArray) 与 可变数组(NSMutableArray)
来源:互联网 发布:陌生人群发软件 编辑:程序博客网 时间:2024/06/02 13:40
不可变数组(NSArray) 与 可变数组(NSMutableArray)
//
// main.m
// Tank-OC05-01
//
// Created by ibokan on 15/12/14.
// Copyright © 2015年谭其伟. All rights reserved.
//
#import <Foundation/Foundation.h>
int main(int argc,const char * argv[]) {
@autoreleasepool {
//不可变数组 NSArray
//初始化
//创建一个空数组
NSArray *array1 = [[NSArrayalloc]init];
NSArray *array2 = [NSArrayalloc];
//创建一个里面只有一个元素的不可变数组
NSArray *array3 = [NSArrayarrayWithObject:@"Tank"];
//创建一个里面有多个元素的不可变数组
NSArray *array4 = [NSArrayarrayWithObjects:@"Tank",@"Kiwir",
@"Quik",nil];
//niL只能出现在数组的最后,不能在数组中间存放nil,因为nil是一个NSArray的结束标志。如果在中间出现,那么就在中间结束运行。在这里nil并不算一个字符,与C不一样
//新语法(第二种语法);
NSArray *array5 = @[@"Rick"];
NSArray *array6 =@[@"Tank",@"Kiwir",@"Quik"];
//根据另一个数组产生新的数组
NSArray *array7 = [NSArrayarrayWithArray:array6];
//少用下面的方法
// NSArray *array8 = [[NSArray alloc]initWithObjects:@"Tank",@"Kiwir",@"Quik", nil];
//从本地文件读取数组
NSArray *array8 = [NSArrayarrayWithContentsOfFile:@""];
//从网络文件读取数组
NSURL *url = [NSURLURLWithString:@"http://www.baidu.com"];//网址是个字符串
NSArray *array9 = [NSArrayarrayWithContentsOfURL:url];
//合起来为
NSArray *array90 =[NSArrayarrayWithContentsOfURL:[NSURLURLWithString:@""]];
//求数组中元素的个数
NSUInteger count = array6.count;
NSLog(@"%lu",count); //lu无符号整形
//数组的操作
//访问数组中的元素
//访问array6中的第一个元素
NSString *str = [array6 objectAtIndex:0]; //里面是一个字符串,所以用一个字符串来接收
NSLog(@"str = %@",str);
//遍历数组元素
for (int i =0; i<array6.count; i++) {
NSString *str1 =[array6 objectAtIndex:i];
NSLog(@"%@",str1);
}
//新语法访问数组中的元素
NSString *str2 = array6[0];
NSLog(@"str2 = %@",str2);
//NSNumber
char c;
NSNumber *number = [NSNumbernumberWithChar:c];
//等价于
//新语法
NSNumber *number2 = @5;
NSNumber *number3 = [NSNumbernumberWithBool:YES];
//等价于新语法
NSNumber *number4 = @YES;
//通过数组中的元素找下标
NSUInteger index = [array6 indexOfObject:@"Tank"];
NSLog(@"index = %lu",index);
//判断数组中是否存在某个元素
BOOL flag = [array6 containsObject:@"Tank"];
NSLog(@"flag = %d",flag);
//BOOL 本身 是个整形,返回 1和0 (yes or no)
//向不可变数组中增加一个元素,产生新的不可变数组
NSArray *newArray1 = [array6 arrayByAddingObject:@"KK"];
NSLog(@"%@",newArray1); //直接当对象输出了
for (int i =0; i < array6.count+1; i++) {
NSArray *newArray2 = newArray1[i];
NSLog(@"newArray1[%d] = %@",i,newArray2);
}
//通过某个字符“-”来将已有字符串分开成数组
NSString *string = @"123-456-789";
NSArray *array11 = [string componentsSeparatedByString:@"-"];
NSLog(@"array11 = %@",array11);
//通过某个字符“~”来将已有数组连在一起成字符串
NSString *string12 = [newArray1 componentsJoinedByString:@"~"];
NSLog(@"string12 = %@",string12);
NSArray *array13 = @[@"123",@"456",@"789",@"000"];
NSString *str3 = [array13 componentsJoinedByString:@"-"]; //连接
NSLog(@"str3 = %@",str3);
NSArray *str4 = [str3 componentsSeparatedByString:@"-"]; //分开
NSLog(@"str4 = %@",str4);
NSString *str5 = [str4 componentsJoinedByString:@""]; //中间不加就直接连起来
NSLog(@"str5 = %@",str5);
/*
使用NSArray类注意事项
1.数组越界:当访问NSArray时,索引超出元素个数之后会报出一个异常结果,所以最好检查一下索引结果是否越界,然后再进行调用。
2.数组会对加入其中的对象自动把引用计数加一,
3.不能在数组中间存放nil,nil只能出现在数组的最后,因为nil是一个NSArray(不可变数组)线束标志。
*/
// 可变数组
//可变数组NSMutableArray,它是NSArray的子类
//初始化方法
//初始化一个空的可变数组
NSMutableArray *mArray1 = [NSMutableArrayarray];
//创建一个里面只有一个元素的可变数组
NSMutableArray *mArray2 = [NSMutableArrayarrayWithObject:@"1"];
//创建一个里面有多个元素的可变数组
NSMutableArray *mArray3 = [NSMutableArrayarrayWithObjects:@"1",@"2",@"3",@"4",nil];
//好像不能像不可变数组那样新命名
//根据另一个数组产生新的数组
NSMutableArray *mArray4 = [NSMutableArrayarrayWithArray:mArray3];
//可变数组独有的初始化方法,只是初始化,但是这里是可变的,所以最终不一定是10
NSMutableArray *mArray5 = [NSMutableArrayarrayWithCapacity:10];
//数组的容量也只是数组最终大小的一个参考,容量数值之所以存在,是为了cocoa能够对代码进行一些优化,cocoa即不会将对象预写入数组,也不会用该容量来限制数组的大小。
//从本地读取数组
NSMutableArray *mArray6 = [NSMutableArrayarrayWithContentsOfFile:@""];
//从网络读取数组
NSMutableArray *mArray7 = [NSMutableArrayarrayWithContentsOfURL:[NSURLURLWithString:@""]];
//增加
//在数组的末尾加一个元素
[mArray3 addObject:@"5"]; //没有返回值
//在数组指定位置插入一个元素
[mArray3 insertObject:@"Tank"atIndex:2];
//替换,将数组指定位置上的元素替换成新的元素
[mArray3 replaceObjectAtIndex:2withObject:@"Kiwir"];
//交换,将数组指定位置上的两个元素交换位置 //如下将第1位和第2位交换
[mArray3 exchangeObjectAtIndex:0withObjectAtIndex:1];
//删除
//删除指定元素
[mArray3 removeObject:@"1"];
//删除指定位置上的元素
[mArray3 removeObjectAtIndex:0]; //删除第一个
//删除数组中最后一个元素
[mArray3 removeLastObject];
//删除数组所有元素
// [mArray3 removeAllObjects];
//遍历
for (int i =0; i < mArray3.count; i++) {
NSLog(@"111 = %@",mArray3[i]);
}
//数组的遍历
NSMutableArray *marray = [NSMutableArrayarrayWithObjects:@"1",@"2",@"3",@"4",@"5",nil];
//1法for循环
//2法,数组的遍历 快速枚举 "forin"
for (NSString *elementin marray) {
NSLog(@"222 = %@",element);
}
//使用系统提供的枚举类型
NSEnumerator *enumerator = [marray objectEnumerator];
//得到一个枚举器以后我们就可以通过while循环来遍历数组元素,而不用管索引问题,每次循环可以通过枚举器的nextObject方法得到下一个数组里的对象,直到到nextObject为nil时,循环结束,这也是为什么数组元素中不要出现nil的原因
id ele;
while (ele = [enumerator nextObject]) { //使用枚举器遍历集合
NSLog(@"%@",ele);
}
/*
注意:
我们使用枚举器遍历数组元素期间,不要添加或者删除数组元素,否则运行的时候程序会崩溃
因为通过objectEnumerator的枚举器的时候数组元素的个数已经记录在枚举器里了,在遍历的时候,如果添加或删除数组元素的话,数组元素的个数就前后不一致而出现异常。
*/
}
return 0;
}
输出:
2015-12-15 19:26:41.354 Tank-OC05-01[34545:277399] 32015-12-15 19:26:41.355 Tank-OC05-01[34545:277399] str = Tank2015-12-15 19:26:41.355 Tank-OC05-01[34545:277399] Tank2015-12-15 19:26:41.355 Tank-OC05-01[34545:277399] Kiwir2015-12-15 19:26:41.355 Tank-OC05-01[34545:277399] Quik2015-12-15 19:26:41.355 Tank-OC05-01[34545:277399] str2 = Tank2015-12-15 19:26:41.356 Tank-OC05-01[34545:277399] index = 02015-12-15 19:26:41.356 Tank-OC05-01[34545:277399] flag = 12015-12-15 19:26:41.356 Tank-OC05-01[34545:277399] ( Tank, Kiwir, Quik, KK)2015-12-15 19:26:41.356 Tank-OC05-01[34545:277399] newArray1[0] = Tank2015-12-15 19:26:41.356 Tank-OC05-01[34545:277399] newArray1[1] = Kiwir2015-12-15 19:26:41.356 Tank-OC05-01[34545:277399] newArray1[2] = Quik2015-12-15 19:26:41.357 Tank-OC05-01[34545:277399] newArray1[3] = KK2015-12-15 19:26:41.357 Tank-OC05-01[34545:277399] array11 = ( 123, 456, 789)2015-12-15 19:26:41.357 Tank-OC05-01[34545:277399] string12 = Tank~Kiwir~Quik~KK2015-12-15 19:26:41.357 Tank-OC05-01[34545:277399] str3 = 123-456-789-0002015-12-15 19:26:41.358 Tank-OC05-01[34545:277399] str4 = ( 123, 456, 789, 000)2015-12-15 19:26:41.358 Tank-OC05-01[34545:277399] str5 = 1234567890002015-12-15 19:26:41.359 Tank-OC05-01[34545:277399] 111 = Kiwir2015-12-15 19:26:41.359 Tank-OC05-01[34545:277399] 111 = 32015-12-15 19:26:41.359 Tank-OC05-01[34545:277399] 111 = 42015-12-15 19:26:41.359 Tank-OC05-01[34545:277399] 222 = 12015-12-15 19:26:41.359 Tank-OC05-01[34545:277399] 222 = 22015-12-15 19:26:41.359 Tank-OC05-01[34545:277399] 222 = 32015-12-15 19:26:41.360 Tank-OC05-01[34545:277399] 222 = 42015-12-15 19:26:41.360 Tank-OC05-01[34545:277399] 222 = 52015-12-15 19:26:41.360 Tank-OC05-01[34545:277399] 12015-12-15 19:26:41.360 Tank-OC05-01[34545:277399] 22015-12-15 19:26:41.360 Tank-OC05-01[34545:277399] 32015-12-15 19:26:41.360 Tank-OC05-01[34545:277399] 42015-12-15 19:26:41.361 Tank-OC05-01[34545:277399] 5Program ended with exit code: 0
- OC语言 集合>>不可变数组(NSArray) 与 可变数组(NSMutableArray)
- 不可变数组(NSArray)与可变数组(NSMutableArray)
- 不可变数组NSArray与可变数组NSMutableArray
- OC 中的数组方法(不可变数组NSArray 和 可变数组 NSMutableArray)
- 不可变数组NSArray和可变数组NSMutableArray
- 数组的常用方法(不可变:NSArray, 可变:NSMutableArray)
- OC 重点之NSArray(数组) NSDictionary不可变字典类与NSMutableDictionary 可变字典类 (概括)
- 不可变数组NSArray和可变数组
- 不可变数组NSArray和可变数组NSMutableArray区别和用法
- Objective-C(十一、不可变数组NSArray,可变数组NSMutableArray)——iOS开发基础
- ios可变数组NSMutableArray和不可变数组NSArray的区别
- OC 数组中的方法 (不可变数组NSArry 和可变数组 NSMutableArray)
- iOS OC(四) 字符串NSString 可变数组NSMutableArray 不可变数组NSArray 数值对象类NSNumber NSValue 数值对象类NSNumber
- 黑马程序员——Objective-C学习之不可变与可变集合(NSArray\NSMutableArray)
- OC中不可变数组与可变数组
- OC学习----可变数组与不可变数组
- OC不可变数组NSArray详解
- oc学习之NSArray与NSMutableArray数组
- 弹出框组件
- 《黑客与画家》阅读笔记
- 登陆多台远程服务器,执行程序
- LBP(局部二值模式)基础知识篇
- Mysql相关
- OC语言 集合>>不可变数组(NSArray) 与 可变数组(NSMutableArray)
- 在工作过程中,对RabbitMQ的一些体会
- 应用服务器之tomcat
- 单向链表的创建
- 每个C++开发者都应该使用的十个C++11特性
- hdoj2030 汉字统计
- t分布噪声图像
- 第九周 项目1 猴子选大王 (数组)
- android.database.sqlite.SQLiteException: no such column