iOS开发之OC基础————NSArray、NSSet、NSDictionary
来源:互联网 发布:java thread sleep0 编辑:程序博客网 时间:2024/05/22 13:33
总结一下Foundation框架中常用的三个类:NSArray、NSSet、NSDictionary的常用属性和方法
NSArray、NSSet、NSDictionary只能存储OC对象,不能存储基本数据类型(int , char , double , float , BOOL , enum(枚举))和结构体类型。实际使用时可以将基本数据类型转换成NSNumber类型。
NSArray:OC中的数组,其中的数据有序排列,可有重复数据,容量大小固定,NSMutableArray是其子类,容量大小可变。他们能存储不同类型的OC对象,但是不能存储nil和基本数据类型的数据以及结构体类型的数据。
//数组的创建void arrayCreate(void) { //表示创建一个有两个元素的数组,nil代表数组结束的标记,并不是数组的元素 NSArray *array = [[NSArray alloc] initWithObjects:@"kathy", @"Tom", nil]; //NSArray *array1 = [NSArray arrayWithArray:array]; //[NSArray alloc] initWithArray] Person *p = [[Person alloc] init]; p.age = 10; //OC数组中可以存储不同类型的OC对象,不能存储基本类型数据。 char *str = "hello"; NSArray *array1 = [NSArray arrayWithObjects:@"kathy", p, nil]; //NSArray类中的description方法分别调用了每一个元素所属类的description方法。 //NSLog(@"%@", array1); //新语法创建的OC数组-->编译器行为自动转化 NSArray *array2 = @[@"kathy", @"hello", p]; //访问数组元素 NSLog(@"数组的第一个元素:%@", [array2 lastObject]); NSLog(@"数组的第二个元素:%@", [array2 objectAtIndex:1]); //新语法-->自动转化成objectAtIndex的方法调用 NSLog(@"数组的第二个元素:%@", array2[1]); }//数组的遍历void arrayEnumerate(void) { Person *p = [[Person alloc] init]; p.age = 10; NSArray *array = @[@"kathy", @"hello", p]; //1.普通遍历// for (NSUInteger i = 0; i < array.count; i++) {// // NSLog(@"%lu:%@", i, array[i]);// } //2.快速遍历:效率更高 for (id object in array) { NSInteger i = [array indexOfObject:object]; NSLog(@"%li:%@", i, object); } //3.block遍历 }void mutableArrayUse(void) { NSMutableArray *mArray = [NSMutableArray arrayWithCapacity:5]; [mArray addObject:@"kathy"]; [mArray addObject:@"hello"]; [mArray addObject:@"kathy"]; NSLog(@"count:%lu",mArray.count); //数组实际元素的个数,capacity:预留的空间 //NSMutableArray *mArray2 = @[@"kathy", @"Tom"]; //通过新语法创建的数组类型为NSArray,即不可变数组,不能调用NSMutableArray中新增的方法 //[mArray2 addObject:@"work"]; NSArray *array = @[@"kathy", @"Tom"]; NSMutableArray *mArray2 = [NSMutableArray arrayWithArray:array]; [mArray2 addObject:@"work"]; NSLog(@"%@", mArray2); //插入元素 [mArray2 addObject:@"tengteng"]; //删除元素 [mArray2 removeObject:@"tengteng"];}
NSSet和NSArray的不同:其中的数据无序排布,不能有相同的数据存储在其中。
NSMutableSet是其子类,是可变存储空间的集合。
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) { @autoreleasepool { //1.Set的创建 NSSet *s1 = [NSSet set]; //空的Set NSSet *s2 = [NSSet setWithObjects:@"kathy", @"Mark", nil]; NSArray *array = @[@"kathy", @"kathy", @"Mark"]; //数组转化为集合,其中相同个的元素会丢失 NSSet *s3 = [NSSet setWithArray:array]; NSLog(@"%@", s3); //2.NSSet转化成NSArray NSArray *array2 = [s3 allObjects]; //3.元素的个数 NSUInteger count = s3.count; //4.访问Set中第一个元素 NSLog(@"%@", array[0]); //不能使用下标来访问Set中的元素,因为其排布是无序的。// NSLog(@"%@", s3[0]); //随机取出Set中的某一个元素 NSLog(@"%@", [s3 anyObject]); //如果想确定取出Set中的某一个元素,可以先将其转化为NSArray,再根据下标取出某个元素 //5.遍历Set中所有的元素 for (NSString *str in s3) { NSLog(@"%@", str); } //比较NSSet和NSArray: 面试题目// 1.数组中的元素有序,Set中的元素无序// 2.数组可以重复存入相同值的对象,而Set不可以。 } return 0;}
NSDictionary使用键(key)——值(value)对来存储数据的,key作为元素的索引来使用,通过key来查找到对应的value。不能在NSDictionary中存在相同的键值对,NSDictionary存储的数据也是无序排布的。
NSMutableDictionary是可变存储容量的字典,是NSDictionary的子类。
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) { @autoreleasepool { //练习:五个同学和相关信息 NSArray *students = @[ @{@"name": @"jack", @"qq" : @"1233444", @"age" : @20, @"phoneNumber" : @[@"89089000", @"1345678", @"1233445"] }, @{@"name": @"Tom", @"qq" : @"1789008", @"age" : @30, @"phoneNumber" : @[@"89089001", @"1345345", @"179995"] }, @{@"name": @"Jim", @"qq" : @"10988444", @"age" : @40, @"phoneNumber" : @[@"899349289", @"193483988", @"1249584395"] }, @{@"name": @"Kathy", @"qq" : @"1213444", @"age" : @50, @"phoneNumber" : @[@"890890780", @"13494978", @"120049445"] } ]; //获取到字典数组的第一个元素 NSDictionary *jack = students[0]; NSLog(@"%@", jack); //获取到第二个同学的qq NSDictionary *tom = students[1]; NSString *qq = tom[@"qq"]; NSLog(@"%@", qq); //第三个同学的所有电话 NSArray *phones = students[2][@"phoneNumber"]; NSLog(@"%@", phones); //第四个同学的寝室电话 NSString *roomPhone = students[3][@"phoneNumber"][2]; NSLog(@"%@", roomPhone); //1.创建NSDictionary //存储一个人的相关信息:name, address, qq NSDictionary *dict1 = [NSDictionary dictionaryWithObjectsAndKeys:@"kathy", @"name", @"hangzhou", @"address", @"213456", @"qq", nil]; NSLog(@"%@", dict1); //新语法 NSDictionary *dict2 = @{ @"name" : @"kathy", @"address" : @"Hangzhou", @"qq" : @"13344" }; //2.访问元素 //通过Key获取值 NSString *object = [dict2 objectForKey:@"name"]; NSLog(@"%@", object); //新语法:key相当于查找元素的索引 NSString *object1 = dict2[@"name"]; NSLog(@"%@", object1); //3.字典的遍历 NSArray *keys = [dict2 allKeys]; //获取到所有的key for (NSInteger i = 0; i < dict2.count; i++) { NSString *key = keys[i]; NSString *object = dict2[key]; //根据key获取值 NSLog(@"%@:%@", key, object); } for (NSString *key in dict2) { NSLog(@"%@:%@", key, dict2[key]); } //4可变字典 NSMutableDictionary *dict3 = [NSMutableDictionary dictionaryWithCapacity:3]; //字典中不允许出现key值相同的键值对 [dict3 setObject:@"kathy" forKey:@"name"]; [dict3 setObject:@"hangzhou" forKey:@"address"]; [dict3 setObject:@"Tom" forKey:@"name"]; NSLog(@"%@", dict3); //用新语法创建的字典是一个不可变字典 NSDictionary *dic5 = @{ @"name" : @"kathy", @"address" : @"Hangzhou", @"qq" : @"13344" }; //[dic5 setObject:@"135889" forKey:@"tel"]; NSMutableDictionary *dic6 = [NSMutableDictionary dictionaryWithDictionary:dic5]; } return 0;}
0 0
- iOS开发之OC基础————NSArray、NSSet、NSDictionary
- OC基础—集合之NSSet、NSDictionary(字典)、NSMutableDictionary
- 黑马程序员——类集合之NSArray,NSSet,NSDictionary
- Foundation框架—NSArray、NSSet、NSDictionary、NSNumber、NSDate、NSValue
- 黑马程序员——OC之NSArray、NSDictionary
- iOS OC (五) 字典NSDictionary 数组 NSArray 集合 NSSet
- iOS开发遍历集合(NSArray,NSDictionary、NSSet)方法总结
- iOS开发遍历集合(NSArray,NSDictionary、NSSet)方法总结
- iOS开发遍历集合(NSArray,NSDictionary、NSSet)方法总结
- 黑马程序员——OC基础---Foundation<NSArray补充,NSMultableArray,NSDictionary>
- 黑马程序员——ios学习笔记 OC Foundation—NSArray&NSDictionary
- NSArray、NSSet、NSDictionary区别-OC+class
- OC中的集合类NSSet、NSArray、NSDictionary
- iOS基础知识:Objective-C 之 NSString,NSArray,NSDictionary,NSSet
- 黑马程序员—— Foundation框架NSArray、NSSet、NSDictionary、NSNumber、NSDate、NSValue
- OC—NSSet
- 【IOS 开发学习总结-OC-30】★★OC之foundation 框架——集合(NSSet 与 NSMutableSet)
- OC学习之NSDictionary,NSSet
- LRU 与 LFU 算法
- c++的bind()函数
- requestWindowFeature易错处
- 调用Camera进行照相并将照片返回到App界面
- Image Classification: Data-driven Approach, k-Nearest Neighbor, train/val/test splits
- iOS开发之OC基础————NSArray、NSSet、NSDictionary
- jenkins部署war 报错required: java.lang.Long found: java.lang.Object
- 菜鸟学习nodejs--Socket.IO即时通讯
- 解决Bootstrap的row类,引起网页横向滚动条的问题。
- Android之TelephonyManager&GsmCellLocation类的方法详解
- Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析
- vtk实战(十六)——解析STL文件
- 线性表
- Commons Collections Java反序列化漏洞深入分析