Objective-C: Foundation——NSArray、NSMutableArray
来源:互联网 发布:数组指针和指针数组 编辑:程序博客网 时间:2024/05/16 01:38
1.NSArray
1.1 创建方法(5种)
1.2 求数组长度
1.3 根据指定下标获取元素值
1.4 根据元素值求下标
1.5 遍历(2种)
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) { @autoreleasepool { //创建方法 NSArray *array1=[NSArray array]; //空数组,没有意思。 NSArray *array2=[NSArray arrayWithObject:@"one"];//只有一个元素的数组 NSArray *array3=[NSArray arrayWithObjects:@"one", @"two",@"three",nil];//有多个元素的数组。 NSLog(@"array3:%@",array3); NSArray *array4=@[@"one",@"two",@"three"]; //优化后的方法,最常用 NSLog(@"array4:%@",array4); NSArray *array5=[NSArray arrayWithArray:array4]; //生成数组副本 NSLog(@"%p,%p",array5,array4); //求数组元素个数 NSUInteger length=array4.count; NSLog(@"array4的元素个数:%lu",length); //求数组指定下标对应的元素值 NSString *str=[array4 objectAtIndex:1]; NSLog(@"下标为1的元素:%@",str); NSLog(@"%@",array4[1]); //优化后的方法,常用 str = [array4 lastObject]; //返回最后一个元素 NSLog(@"最后一个元素:%@",str); str =[array4 firstObject]; //返回第一个元素 NSLog(@"第一个元素:%@",str); //根据元素值求其在数组中的下标 NSUInteger index= [array4 indexOfObject:@"two"]; NSLog(@"two的下标:%lu",index); index=[array4 indexOfObject:@"5"]; NSLog(@"%lu",index); if(index>=array4.count) { NSLog(@"该元素不在数组中"); } //遍历 for(int i=0;i<array4.count;i++) //面向过程循环遍历 { NSLog(@"%@",array4[i]); } NSLog(@"--------"); for(NSString* str in array4) //面向对象循环遍历 { NSLog(@"%@",str); } NSArray *array6=@[@"onr",@"two",@"three",@"two"]; for(NSString *str in array6) { if([str isEqualToString:@"two"]==YES) NSLog(@"%@",str); } } return 0;}
运行结果
2016-08-26 10:57:18.782 cz_day21_03[1965:69922] array3:( one, two, three)2016-08-26 10:57:18.783 cz_day21_03[1965:69922] array4:( one, two, three)2016-08-26 10:57:18.783 cz_day21_03[1965:69922] 0x100200ab0,0x1002002502016-08-26 10:57:18.783 cz_day21_03[1965:69922] array4的元素个数:32016-08-26 10:57:18.783 cz_day21_03[1965:69922] 下标为1的元素:two2016-08-26 10:57:18.783 cz_day21_03[1965:69922] two2016-08-26 10:57:18.783 cz_day21_03[1965:69922] 最后一个元素:three2016-08-26 10:57:18.783 cz_day21_03[1965:69922] 第一个元素:one2016-08-26 10:57:18.783 cz_day21_03[1965:69922] two的下标:12016-08-26 10:57:18.783 cz_day21_03[1965:69922] 92233720368547758072016-08-26 10:57:18.783 cz_day21_03[1965:69922] 该元素不在数组中2016-08-26 10:57:18.783 cz_day21_03[1965:69922] ( one, two, three)2016-08-26 10:57:18.783 cz_day21_03[1965:69922] one2016-08-26 10:57:18.783 cz_day21_03[1965:69922] two2016-08-26 10:57:18.784 cz_day21_03[1965:69922] three2016-08-26 10:57:18.784 cz_day21_03[1965:69922] --------2016-08-26 10:57:18.784 cz_day21_03[1965:69922] one2016-08-26 10:57:18.784 cz_day21_03[1965:69922] two2016-08-26 10:57:18.784 cz_day21_03[1965:69922] three2016-08-26 10:57:18.784 cz_day21_03[1965:69922] two2016-08-26 10:57:18.784 cz_day21_03[1965:69922] twoProgram ended with exit code: 0
练习
建一个Student类
.h文件
#import <Foundation/Foundation.h>@interface CZStudent : NSObject@property NSString* name;@property int age;-(id)initWithName:(NSString*)name andAge:(int)age;+(id)studentWithName:(NSString*)name andAge:(int)age;-(void)show;@end
.m文件
#import "CZStudent.h"@implementation CZStudent-(id)initWithName:(NSString*)name andAge:(int)age{ self = [super init]; if (self) { self.name=name; self.age=age; } return self;}+(id)studentWithName:(NSString *)name andAge:(int)age{ __autoreleasing CZStudent *stu=[[CZStudent alloc]initWithName:name andAge:age]; return stu;}-(void)show{ NSLog(@"name:%@,age:%d",self.name,self.age);}-(NSString*)description //重写方法{ return [NSString stringWithFormat:@"name:%@,age:%d",self.name,self.age];}@end
main函数
#import <Foundation/Foundation.h>#import "CZStudent.h"//将基本数据类型的数据10、3.14、‘a’,还有学生类的对象放入一个数组中,并遍历数组int main(int argc, const char * argv[]) { @autoreleasepool { NSNumber *n=[NSNumber numberWithInt:10]; NSNumber *d=[NSNumber numberWithFloat:3.14]; CZStudent*stu=[CZStudent studentWithName:@"xiaoming" andAge:18]; NSArray *array=@[n,d,@"a",stu]; for(id obj in array) { NSLog(@"%@",obj); } } return 0;}
汉字转换汉语拼音
NSMutableString *str=[NSMutableString stringWithString:@"计算机语言"]; //转换的必须是可变字符串 //带音标 if(CFStringTransform((__bridge CFMutableStringRef)str,0, kCFStringTransformMandarinLatin, NO)) { NSLog(@"%@",str); } //不带音标 if(CFStringTransform((__bridge CFMutableStringRef)str, 0,kCFStringTransformStripDiacritics,NO)) { NSLog(@"%@",str); }
1.6 排序
建一个Integer类
.h文件
#import <Foundation/Foundation.h>@interface CZInteger : NSObject@property int integer;-(id)initWithInteger:(int)integer;+(id)integerWithInteger:(int)integer;-(void)show;-(NSComparisonResult)compareInteger:(CZInteger*)other; //声明排序规则@end
.m文件
#import "CZInteger.h"@implementation CZInteger-(id)initWithInteger:(int)integer{ if(self=[super init]) { self.integer=integer; } return self;}+(id)integerWithInteger:(int)integer{ __autoreleasing CZInteger* i=[[CZInteger alloc]initWithInteger:integer]; return i;}-(void)show{ NSLog(@"%d",self.integer);}-(NSString*)description{ return [NSString stringWithFormat:@"%d",self.integer];}-(NSComparisonResult)compareInteger:(CZInteger *)other //升序规则,>,<变更一下就变成降序规则{ if(self.integer<other.integer) { return NSOrderedAscending; } else if(self.integer>other.integer) { return NSOrderedDescending; } else return NSOrderedSame;}@end
main函数
#import <Foundation/Foundation.h>#import "CZInteger.h"int main(int argc, const char * argv[]) { @autoreleasepool { CZInteger *i1=[CZInteger integerWithInteger:10]; CZInteger *i2=[CZInteger integerWithInteger:3]; CZInteger *i3=[CZInteger integerWithInteger:8]; CZInteger *i4=[CZInteger integerWithInteger:17]; CZInteger *i5=[CZInteger integerWithInteger:5]; NSArray *array=@[i1,i2,i3,i4,i5]; NSArray *sorted=[array sortedArrayUsingSelector:@selector(compareInteger:)]; NSLog(@"%@",sorted); } return 0;}
运行结果
2016-08-26 14:30:21.719 cz_day21_05[2873:183915] ( 3, 5, 8, 10, 17)Program ended with exit code: 0
练习
建一个Student类
.h文件
#import <Foundation/Foundation.h>@interface CZStudent : NSObject@property NSString* name;@property int age;@property NSMutableString *pinYin;-(id)initWithName:(NSString*)name andAge:(int)age;+(id)studentWthName:(NSString*)name andAge:(int)age;-(NSComparisonResult)compareAge:(CZStudent*)other;-(NSComparisonResult)compareName:(CZStudent *)other;@end
.m文件
#import "CZStudent.h"@implementation CZStudent-(id)initWithName:(NSString*)name andAge:(int)age{ self = [super init]; if (self) { self.name=name; self.pinYin=[NSMutableString stringWithString:self.name]; CFStringTransform((__bridge CFMutableStringRef)self.pinYin, 0, kCFStringTransformMandarinLatin, NO);//将汉字转换成拼音 self.age=age; } return self;}+(id)studentWthName:(NSString *)name andAge:(int)age{ __autoreleasing CZStudent* stu=[[CZStudent alloc]initWithName:name andAge:age]; return stu;}-(NSString*)description{ return [NSString stringWithFormat:@"name:%@,age:%d",self.name,self.age];}-(NSComparisonResult)compareAge:(CZStudent*)other{ if(self.age<other.age) { return NSOrderedAscending; } else if(self.age>other.age) { return NSOrderedDescending; } else return NSOrderedSame;}-(NSComparisonResult)compareName:(CZStudent *)other{ return [self.pinYin compare:other.pinYin];}@end
main函数
#import <Foundation/Foundation.h>#import "CZStudent.h"int main(int argc, const char * argv[]) { @autoreleasepool { CZStudent* s1=[CZStudent studentWthName:@"张三" andAge:19]; CZStudent* s2=[CZStudent studentWthName:@"李四" andAge:10]; CZStudent* s3=[CZStudent studentWthName:@"王五" andAge:28]; CZStudent* s4=[CZStudent studentWthName:@"赵六" andAge:3]; CZStudent* s5=[CZStudent studentWthName:@"钱七" andAge:22]; NSArray *array=@[s1,s2,s3,s4,s5]; //年龄排序 NSArray *sorted=[array sortedArrayUsingSelector:@selector(compareAge:)]; for(id obj in sorted) { NSLog(@"%@",obj); } //姓名排序 NSArray *sortedName=[array sortedArrayUsingSelector:@selector(compareName:)]; NSLog(@"---------"); for(id obj in sortedName) { NSLog(@"%@",obj); } } return 0;}
运行结果
016-08-26 15:37:32.846 cz_day21_06[3367:209237] name:赵六,age:32016-08-26 15:37:32.847 cz_day21_06[3367:209237] name:李四,age:102016-08-26 15:37:32.847 cz_day21_06[3367:209237] name:张三,age:192016-08-26 15:37:32.847 cz_day21_06[3367:209237] name:钱七,age:222016-08-26 15:37:32.847 cz_day21_06[3367:209237] name:王五,age:282016-08-26 15:37:32.847 cz_day21_06[3367:209237] ---------2016-08-26 15:37:32.847 cz_day21_06[3367:209237] name:李四,age:102016-08-26 15:37:32.847 cz_day21_06[3367:209237] name:钱七,age:222016-08-26 15:37:32.847 cz_day21_06[3367:209237] name:王五,age:282016-08-26 15:37:32.847 cz_day21_06[3367:209237] name:赵六,age:32016-08-26 15:37:32.847 cz_day21_06[3367:209237] name:张三,age:19Program ended with exit code: 0
1.7 副本中的数组元素,深浅拷贝生成方法
#import <Foundation/Foundation.h>#import "CZStudent.h"int main(int argc, const char * argv[]) { @autoreleasepool { CZStudent* s1=[CZStudent studentWthName:@"张三" andAge:18]; CZStudent* s2=[CZStudent studentWthName:@"李四" andAge:20]; CZStudent* s3=[CZStudent studentWthName:@"王五" andAge:19]; NSArray *stu=@[s1,s2,s3]; NSArray *copied=[[NSArray alloc]initWithArray:stu copyItems:NO];//写成NO是引用计数拷贝 NSLog(@"s1:%p,stu[0]:%p,copied[0]%p",s1,stu[0],copied[0]); //深拷贝 NSArray *copiedDeep=[[NSArray alloc]initWithArray:stu copyItems:YES]; NSLog(@"s1:%p,stu[0]:%p,copiedDeep[0]%p",s1,stu[0],copied[0]); } return 0;}
运行结果
2016-08-26 16:13:53.164 cz_day21_08[3770:220267] s1:0x100700320,stu[0]:0x100700320,copied[0]0x1007003202016-08-26 16:13:53.165 cz_day21_08[3770:220267] s1:0x100700320,stu[0]:0x100700320,copiedDeep[0]0x100700320Program ended with exit code: 0
3.NSMutableArray
3.1 可变数组
3.2 创建方法(3种)
3.3 添加方法(2种)
3.4 修改方法(2种)
3.5 删除方法(6种)
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) { @autoreleasepool { //创建方法 NSMutableArray *array1=[NSMutableArray array]; //空数组,有意义 NSMutableArray *array2=[NSMutableArray arrayWithCapacity:100]; //预估值 NSMutableArray *array3=@[@"one",@"two"]; //会退化成NSArray NSMutableArray *array4=[NSMutableArray arrayWithObjects:@"one",@"two",@"three", nil]; NSLog(@"array4:%@",array4); //添加元素 [array4 addObject:@"four"]; //在最后追加一个元素 NSLog(@"末尾加元素:%@",array4); [array4 insertObject:@"five" atIndex:1]; NSLog(@"在指定下标加元素:%@",array4); //修改 [array4 replaceObjectAtIndex:1 withObject:@"aaa"];//修改指定下标元素 NSLog(@"修改指定下标元素:%@",array4); NSArray *replace =@[@"five",@"six",@"seven",@"eight",@"nine",@"ten"]; [array4 replaceObjectsInRange:NSMakeRange(1,2) withObjectsFromArray:replace];//批量修改 NSLog(@"批量修改:%@",array4); //删除方法 [array4 removeLastObject]; //删除最后一个元素 NSLog(@"删除最后一个元素:%@",array4); [array4 removeObjectAtIndex:0]; //指定下标元素删除 NSLog(@"指定下标元素删除:%@",array4); [array4 removeObject:@"six"];//指定元素删除 NSLog(@"指定元素删除:%@",array4); [array4 removeObjectsInRange:NSMakeRange(3, 2)]; //指定范围删除 NSLog(@"指定范围删除:%@",array4); NSArray *del=@[@"seven",@"three"]; //指定批量元素删除 [array4 removeObjectsInArray:del]; NSLog(@"指定批量元素删除:%@",array4); [array4 removeAllObjects]; //清空数组 NSLog(@"清空数组:%@",array4); } return 0;}
输出结果
2016-08-26 17:02:16.981 cz_day21_09[4164:236372] array4:( one, two, three)2016-08-26 17:02:16.982 cz_day21_09[4164:236372] 末尾加元素:( one, two, three, four)2016-08-26 17:02:16.982 cz_day21_09[4164:236372] 在指定下标加元素:( one, five, two, three, four)2016-08-26 17:02:16.982 cz_day21_09[4164:236372] 修改指定下标元素:( one, aaa, two, three, four)2016-08-26 17:02:16.982 cz_day21_09[4164:236372] 批量修改:( one, five, six, seven, eight, nine, ten, three, four)2016-08-26 17:02:16.982 cz_day21_09[4164:236372] 删除最后一个元素:( one, five, six, seven, eight, nine, ten, three)2016-08-26 17:02:16.982 cz_day21_09[4164:236372] 指定下标元素删除:( five, six, seven, eight, nine, ten, three)2016-08-26 17:02:16.983 cz_day21_09[4164:236372] 指定元素删除:( five, seven, eight, nine, ten, three)2016-08-26 17:02:16.983 cz_day21_09[4164:236372] 指定范围删除:( five, seven, eight, three)2016-08-26 17:02:16.983 cz_day21_09[4164:236372] 指定批量元素删除:( five, eight)2016-08-26 17:02:16.983 cz_day21_09[4164:236372] 清空数组:()Program ended with exit code: 0
练习
#import <Foundation/Foundation.h>#import "CZStudent.h"int main(int argc, const char * argv[]) { @autoreleasepool { CZStudent* s1=[CZStudent studentWithName:@"s1" andAge:18]; CZStudent* s2=[CZStudent studentWithName:@"s2" andAge:18]; CZStudent* s3=[CZStudent studentWithName:@"s3" andAge:18]; CZStudent* s4=[CZStudent studentWithName:@"s4" andAge:18]; CZStudent* s5=[CZStudent studentWithName:@"s5" andAge:18]; CZStudent* s6=[CZStudent studentWithName:@"s6" andAge:18]; CZStudent* s7=[CZStudent studentWithName:@"s7" andAge:18]; CZStudent* s8=[CZStudent studentWithName:@"s8" andAge:18]; NSMutableArray *Class1=[NSMutableArray arrayWithObjects:s1,s2, nil]; NSMutableArray *Class2=[NSMutableArray arrayWithObjects:s3,s4, nil]; NSMutableArray *Class3=[NSMutableArray arrayWithObjects:s5,s6, nil]; NSMutableArray *Class4=[NSMutableArray arrayWithObjects:s7,s8, nil]; NSMutableArray *College1=[NSMutableArray arrayWithObjects:Class1,Class2, nil]; NSMutableArray *College2=[NSMutableArray arrayWithObjects:Class3,Class4, nil]; NSMutableArray *School=[NSMutableArray arrayWithObjects:College1,College2, nil]; for(id obj in School) { NSLog(@"%@",obj); } for(id obj1 in School) for(id obj2 in obj1) for(id obj3 in obj2) NSLog(@"%@",obj3);} return 0;}
运行结果
2016-08-26 17:50:44.070 cz_day21_每日一练[4595:250550] ( ( "name:s1,age:18", "name:s2,age:18" ), ( "name:s3,age:18", "name:s4,age:18" ))2016-08-26 17:50:44.071 cz_day21_每日一练[4595:250550] ( ( "name:s5,age:18", "name:s6,age:18" ), ( "name:s7,age:18", "name:s8,age:18" ))2016-08-26 17:50:44.071 cz_day21_每日一练[4595:250550] name:s1,age:182016-08-26 17:50:44.071 cz_day21_每日一练[4595:250550] name:s2,age:182016-08-26 17:50:44.071 cz_day21_每日一练[4595:250550] name:s3,age:182016-08-26 17:50:44.071 cz_day21_每日一练[4595:250550] name:s4,age:182016-08-26 17:50:44.071 cz_day21_每日一练[4595:250550] name:s5,age:182016-08-26 17:50:44.071 cz_day21_每日一练[4595:250550] name:s6,age:182016-08-26 17:50:44.071 cz_day21_每日一练[4595:250550] name:s7,age:182016-08-26 17:50:44.071 cz_day21_每日一练[4595:250550] name:s8,age:18Program ended with exit code: 0
0 0
- Objective-C: Foundation——NSArray、NSMutableArray
- Foundation => Objective-C - NSArray & NSMutableArray
- Objective-c的Foundation中常用类3——数组NSArray、NSMutableArray
- Objective-C Foundation——NSArray(数组)
- Objective-c - NSArray(NSMutableArray)
- Objective-c - NSArray(NSMutableArray)
- Objective-c - NSArray(NSMutableArray)
- Objective-C----NSArray、NSMutableArray
- Objective-C NSArray & NSMutableArray
- Foundation框架—数组 NSArray -NSMutableArray
- Objective-c学习笔记05——NSArray(NSMutableArray)
- Objective-C Foundation框架实践——NSMutableArray(一)
- Objective-c之NSArray(NSMutableArray)
- Objective-c之NSArray(NSMutableArray)
- Objective-C基础-NSArray & NSMutableArray
- Objective-c之NSArray(NSMutableArray)
- Objective-C Foundation框架实践——NSArray(一)
- Objective-C Foundation框架实践——NSArray(二)
- VLC同时开启播放多个视频流BAT脚本
- ble常用概念讲解
- 备忘
- 如何用两个栈形成一个队列
- lua中的table简单应用
- Objective-C: Foundation——NSArray、NSMutableArray
- Android中给Listview的HeadView加ViewPager自动轮播图,解决滑动冲突
- Spring 加载xml配置文件路径问题
- #100 Remove Duplicates from Sorted Array
- EasyUI容易被js脚本攻击的基本处理
- 简单实用的进度条加载组件loader.js
- VC中的双缓冲绘图技术
- mysql中间件Atlas安装
- Effective Modern C++ 条款19 用std::shared_ptr管理共享所有权的资源