黑马程序员——Foundation框架——集合类(NSSet、NSArray等)(一)

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

OC集合类有NSArray、NSMutableArray、NSSet、NSMutableSet、NSDictionary、NSMutableDictionary。

OC数组不像C语言中的数组只能存储同一种数据类型,它可以放任意类型的对象,但是不能存放nil和非OC对象的类型

NSArray: 用于存储有序的对象集合 (相当于数组)

NSMutableArray:相对于NSArray可用于存储可变有序对象集合

NSSet: 用于存储无序对象集合

NSMutableSet:相对于NSSet 可用于存储可变无序对象集合

NSDictionary :用于键值映射

NSMutableDictionary :相对于NSDictionary ,存储对象可以变化

注意:NSArray、NSSet、NSDictionary 集合类是不可变的,一旦初始化后就不能改变

    NSMutableArray、NSMutableSet、NSMutableDictionary 这三种集合类即使初始化完成后,仍然可以改变

    这些集合类只能手机NSObject对象,如果想保存一些原始数据类型(如int、float、double、BOOL等),则需要将这些原始的C数据封装成NSNumber类型。

NSString用法

1,使用NSString类的对象初始化方法创建字符串

创建无参数的字符串

NSString *str2 = [[NSString alloc] initWithString:@"Jack"];
创建带参数的字符串
NSString *str3 = [[NSString alloc] initWithFormat:@"age is %d",10];
C字符串转换为OC字符串
NSString *str4 = [[NSString alloc] initWithUTF8String:"Rose"];
OC字符串转换为C字符串
const char c = [str4 UTF8String];
读取文件内容第一种方式:读取桌面下getWeather.xml 文件里所有内容
NSString *str5 = [[NSString alloc] initWithContentsOfFile:@"/Users/apple/Desktop/getWeather.xml" encoding:NSUTF8StringEncoding error:nil];
NSUTF8StringEncoding适用于使用中文的编码格式

读取文件内容的第二种方式

NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/apple/Desktop/getWeather.xml"];
URL:资源路径 可是为:协议头://     比如本地文件URL格式:file://       网络文件的URL格式 :http://     服务器文件的URL格式为:ftp://

如果访问网络就可以定义:http://www.baidu.com

NSString *str6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

2,使用NSString类方法创建字符串

创建无参数的字符串

NSString *str2 = [NSString stringWithString:@"Jack"];
创建有参数的字符串
NSString *str3 = [NSString stringWithFormat:@"age is %d",10];
C字符串转化为OC字符串
NSString *str4 = [NSString stringWithUTF8String:"Rose"];
读取文件内容的第一种方式:读取桌面下getWeather.xml文件里的所有内容
NSString *str5 = [NSString stringWithContentsOfFile:@"file:///Users/apple/Desktop/getWeather.xml" encoding:NSUTF8StringEncoding error:nil];
NSUTF8StringEncoding适用于使用中文的编码格式

读取文件内容第二种方式:读取桌面下getWeather.xml文件里的所有内容

NSURL *url = [NSURL URLWithString:@"file:///Users/apple/Desktop/getWeather.xml"];
NSString *str6 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
注:可以看出实现同一个功能的NSString提供了对象方法和类方法两种解决方式二类方法快捷方便,因此实际开发中推荐使用类方法来操作字符串


3,将字符串写入到一个文件里

给目标文件中写入字符串,两种写入方式,在写入之前都会将文件中的内容全部清空后再写入

第一种方式:

atomically参数值写入不成功时要不要停止

[@"Java,iOS" writeToFile:@"/Users/apple/Desktop/getWeather.xml" atomically:YES encoding:NSUTF8StringEncoding error:nil];
第二种方式:
NSString *content = @"iOS,Java";
NSURL提供了直接定义本地URL的类方法
NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/getWeather.xml"];
[content writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];

NSMutableString类的使用

NSMutableString继承自NSString那么NSMutableString可以使用NSString类重的任意方法

NSMutableString提供了自己独有的方法

NSString *str = [NSString stringWithFormat:@"My age is 10 "];
NSString *str2 = [str stringByAppendingString:@"11 12"];
NSLog(@"%@",str2);      // 打印:My age is 10 11 12
    
NSMutableString *mutalbeStr = [NSMutableString stringWithFormat:@"My age is 10 "];
[mutalbeStr appendString:@"11 12"]; // appendString方法没有返回值,说明是直接str字符串后面进行拼接
NSLog(@"%@",mutalbeStr); // 打印:My age is 10 11 12
可以看出:NSString一旦定义了str字符串他本身就不可改变了,虽然NSString类方法也提供了拼接的方法如stringByAppendString方法但是它返回的是一个新的字符串。而NSMutableString提供的拼接方法appendString方法时在原有的字符串上直接拼接它没有返回值。这就是可变和不可变字符串的本质

NSMutableString提供了删除方法,比如要删除上面可变字符串中的 11 有两种方式:

第一种:必须要清楚要删除内容的location和length,11 在整个字符串中的location = 11 ,length = 2 (不推荐使用)

[mutalbeStr deleteCharactersInRange:NSMakeRange(13, 2)];
第二种:先获取要删除内容的范围,然后删除范围内的字符串
NSRange range = [mutalbeStr rangeOfString:@"11"];
[mutalbeStr deleteCharactersInRange:range];
    
NSLog(@"%@",mutalbeStr); // 打印:My age is 10  12

3,OC集合类的操作

1、OC集合类包括NSArray、NSSet、NSDictonarry都是以面向对象的方式操作数据,而且OC 数组不像C语言中 的数组只能存储一种类型,它可以存放任意类型的对象,但是不能存放非OC对象类型如基本数据类型int、struct、enum等。

2,、OC数组是以对象的方式存在的,因此在创建的时候需要为创建的对象前面加上‘*’。

3、NSArray数组一旦创建就不能改变

4,、NSArray数组和子类NSMutableArray的基本操作

// 使用NSArray的类方法arry创建个数组
// 创建时定义为空数组,那么array数组将永远是空数组
NSArray *array = [NSArray array];
NSArray的常见操作:

创建数组对象有两种方式

第一种方式:

NSArray *array = [NSArray arrayWithObjects:@"Jack",nil];
数组中包含了两个NSString对象 nil是用来标识数组元素结束的标识,因此OC数组中不能存放空对象
NSArray *array1 = [NSArray arrayWithObjects:@"Jack",@"Rose", nil];
第二种方式:(推荐使用)
NSArray *array2 = @[@"Jack",@"Rose"];
获取数组长度 array1.count;
NSUInteger count = [array1 count];
NSLog(@"%ld",count);
访问数组中的对象的两种方式
NSString *str1 = [array1 objectAtIndex:0]; // 数组中索引为1的对象,OC中提供的方法 返回:Jack
NSString *str2 = array1[0];   // 编译器特性其实还是转为上面的形式来访问 返回:Jack

遍历数组的三种方式:

第一种方式:

for (int i = 0; i<array1.count; i++) {
      NSLog(@"%@",array1[i]); // 数组中存放的是对象可以用%@输出
      if (i ==0) {
        break;
   }
}
第二种方式:将array1数组中的每个对象拿出来赋给obj然后一次打印
for (id obj in array1) {    // id obj 代表数组中的对象
    // 获取obj对象在数组中的索引
    NSUInteger index = [array1 indexOfObject:obj];
    NSLog(@"%ld-->%@",index,obj);
}
第三种方式:使用block每次从数组中遍历一个元素后就传递给block,block也相应的执行一次
// block中的id obj对应数组中的元素,NSUInteger idx对应数组中元素的索引 BOOL用来停止遍历
[array1 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        
    NSLog(@"%ld-->%@",idx,obj);
        
    // 如果索引为0 立即停止遍历
    if (idx ==0) {
        *stop = YES;
    }
}];

NSMutableArray的基本操作

创建可变数组

NSMutableArray *mutableArray = [NSMutableArray array];
// NSMutableArray *mutalbeArray2 = @[@"张三",@"李斯"];  注意:@[]返回的是不可变NSArray数组 这样会报错
为可变数组增加任意对象
Person *person = [[Person alloc] init];    
[mutableArray addObject:person];
[mutableArray addObject:@"Jack"];
[mutableArray addObject:@"John"];
// [mutableArray addObject:10]; 数组中不可以存放基本数据类型
从数组中删除指定的元素
[mutableArray removeObject:@"John"];
[mutableArray removeObjectAtIndex:0];
将数组中的元素全部删除
[mutableArray removeAllObjects];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值