#NSArray
1、OC数组和C语言数组区别:
1> C :只能存放相同数据类型,内存连续,数组的大小不能改变,数组中的内容可以改变。
2> OC:只能存放OC对象,不能存放非OC对象,内存连续,NSArray数组中的内容不能改变,数组的长度也不能改变。
2、创建NSArray数组:
1> NSArray *arr = [NSArray array];
2> NSArray *arr = [NSArray arrayWithObject: [Person new]];
3> NSArray *arr = [NSArray arrayWithObjects: @"a", @"b", @"c", nil];
4> NSArray *arr = [NSArray arrayWithArray:arr];
5> NSArray *arr = [NSArray arrayWithContentsOfFile:@"/Users/zp3sss/DeskTop/a.plist"]; // 从文件中读取一个数组
6> NSArray *arr = [NSArray arrayWithContentsOfURL: [NSURL fileURLWithPath:@"/Users/zp3sss/DeskTop/a.plist"]];
3、常见NSArray方法:
1> NSUInteger a = arr.count; // 获取集合中元素个数
2> id d = [arr objectAtIndex:2]; // 获取某下标位置的值。
3> BOOL b = [arr containsObject:@"abc"]; // 判断数组是否包含某个元素。- (BOOL) containsObject:(id);
4> id d = [arr lastObject]; // 返回最后一个元素
5> id d = [arr firstObject]; // 返回第一个元素
6> NSUInteger a = [arr indexOfObject:@"abc"]; // 查找元素在数组中的位置
7> NSUInteger a = [arr indexOfObject:@"abc" inRange: NSMakeRange(3,10)]; // 在range范围内查找元素在数组中的位置
4、定义和方法NSArray数组的简化写法:
1> 定义格式:@[数组元素],访问数组格式:数组名[下标]。
NSArray *arr1 = @[@"1", @"abc", [Person new], @4]; // // 这种方式定义的OC数组为NSArray;类型,不能使用NSMutableArray类型变量指向。
NSString *str = arr1[1];
5、NSArray的链接和分割
1> - (NSString *) componentsJoinedByString:(NSString *); //将数组元素使用分割符链接成一个字符串。
NSString *str = [arr componentsJoinedByString:@"-"];
2> - (NSArray *) componentsSeparatedByString:(NSString *); // 将字符串使用分隔符分割成一个NSArray数组。
NSString *str = @"400-400-12580";
NSArray *arr = [str componentsSeparatedByString:@"-"];
6、遍历NSArray数组
1>for循环+下标访问
for(int i=0; i<arr.count; i++){
NSLog(@"%@", arr[i]);
}
2>增强for循环
for(id str in arr){
NSLog(@"%@", str);
}
3>block代码块
// obj:表示当前下标的数据
// idx:当前循环的下标
// stop:控制循环是否结束的开关,当赋值为YES是,表示结束遍历
[arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
if(idx == 2)
{
*stop = YES; // 结束遍历。
}else{
NSLog(@"%ld,%@", idx, obj);
}
}];
7、NSArray排序问题:
1>使用- (NSArray *) sortedArrayUsingComparator:^(NSComparisonResult)(id obj1, id obj2);
NSArray *arr = [NSArray arrayWithObjects:@"F", @"E", @"C", @"B", @"A", @"D", nil];
NSArray *ass = [arr sortedArrayUsingComparator:^(id obj1, id obj2){ // 当代码块返回1时,两个元素交换,当代码块返回0、-1时,两个元素不交换。
return [obj1 compare:obj2]; // 如果想要数组升序排序,则这样写
//return [obj1 compare:obj2]; 如果想要数组降序排序,则这样写
}];
2>使用- (NSArray *) sortedArrayUsingSelector:(SEL)sel;
- (NSComparisonResult) sort:(NSString *) str{ // 扩展NSString类型的大小比较。
return [self compare:str]; // 如果想要数组升序排序,则这样写.
return [str compare:self]; // 如果想要数组降序排序,则这样写.
}
NSArray *arr = [NSArray arrayWithObjects:@"F", @"E", @"C", @"B", @"A", @"D", nil];
NSArray *ass1 = [arr sortedArrayUsingSelector:@selector(sort:)];
NSArray *ass2 = [arr sortedArrayUsingSelector:@selector(compare:)];
8、NSArray读写文件:
1>- (BOOL)writeToFile:(NSString *)文件路径 atomically:(BOOL)是否开启事务; // 写入方法
2>+ (instancetype)arrayWithContentsOfFile:(NSString *)文件路径; // 读取方法
3>一般将NSArray对象和NSDictionary对象中的数据保存在后缀名为plist的文件中,其实就是一个XML文件,以示图的方式显示内容,不在用标签了。
4>writeToFile方法的写入特点是,如果以存在同名同后缀名的文件,将其删除,创建新的文件。
// NSArray和NSDictionary的两种读写格式(保存的xml格式文件中和保存到plist格式文件中)。
BOOL b = [arr writeToFile:@"/Users/thinkpad/Desktop/a.plist" atomically:YES];
BOOL b = [arr writeToFile:@"/Users/thinkpad/Desktop/a.xml" atomically:YES];
BOOL b = [arr writeToURL: [NSURL fileURLWithPath:[@"/Users/thinkpad/Desktop/a.plist"] atomically:YES]];
NSArray *arr = [NSArray arrayWithContentsOfFile:@"/Users/thinkpad/Desktop/a.plist"];
NSArray *arr = [NSArray arrayWithContentsOfFile:@"/Users/thinkpad/Desktop/a.plist"];
NSArray *arr = [NSArray arrayWithContentsOfURL: [NSURL fileURLWithPath:@"/Users/thinkpad/Desktop/a.plist"]];
|
|