黑马程序员-Foundation框架之数组和字典
2014-10-10 15:25
295 查看
一、Foundation框架简介
Foundation框架,顾名思义就是基础框架。基础框架上的类都是与用户界面无关的,为所有的程序开发提供一个基础。OC的基础框架常用的类包括:数组,字典,数字,字符串等以及它们的子类。要使用这个框架需要在引入头文件#import <Foundation/Foundation.h>
二、数组
NSArray类以及它的子类NSMutableArray,一个是不可变数组,一个是可变数组。下面通过代码来看一下它的一些基本的用法。
注意问题:
> @[] 只创建不可变数组NSArray,NSMutableArray *array = @[@"jack", @"rose"];是错误写法。
> 数组不能存放nil值;只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等。
三、字典
字典(NSDictionary,NSMutableDictionary)是由键-值对组成的数据集合。通过key来查找value,key可以是任意类型对象,但是其值必须是唯一的。
下面通过代码来看一下基本用法
注意的问题:
> 字典的快速创建是用大括号@{},这点有别于数组的快速创建@[]。并且快速创建只适用于NSDictionary。
> 字典里面的键值对是无序排列的,而数组里的元素是有序的。
Foundation框架,顾名思义就是基础框架。基础框架上的类都是与用户界面无关的,为所有的程序开发提供一个基础。OC的基础框架常用的类包括:数组,字典,数字,字符串等以及它们的子类。要使用这个框架需要在引入头文件#import <Foundation/Foundation.h>
二、数组
NSArray类以及它的子类NSMutableArray,一个是不可变数组,一个是可变数组。下面通过代码来看一下它的一些基本的用法。
#import <Foundation/Foundation.h> int main(int argc,const char* argv[]) { NSArray *arrayWithEmpty = [NSArray array]; // 创建一个空数组,这个数组永远为空 NSArray *array1 = [NSArray arrayWithObject:@"Himym!"]; // 创建非空数组,含一个元素 NSArray *array2 = [NSArray arrayWithObjects:@"Himym",@"Robb",nil]; // 创建非空数组,含多个元素,以nil结尾 NSArray *array3 = @[@"HImym",@"Baratheon",@"Miss Gao"]; // 快速创建一个对象 NSLog(@"array2 ---- %ld, array3 ---- %ld",array2.count,array3.count); // 数组元素个数 NSLog(@"%@",[array2 objectAtIndex:1]); NSLog(@"%@",array[2]); // 访问数组元素 NSMutableArray *array4 = [NSMutableArray arrayWithObjects:@"Himym",@"Robb",nil]; [array4 addObject:[[Person alloc] init]]; [array4 addObject:@"NaNa"]; // 往数组里面添加元素 [array4 removeObject:@"Miss Zhao"]; [array4 removeObjectAtIndex:1]; [array4 addObjectsFromArray:array2]; for(id obj in array4) // 遍历数组 { NSUInteger i = [array4 indexOfObject:obj]; NSLog(@"%ld ---- %@",i,obj); if(i == 3) break; } [array4 enumerateObjectsUsingBlock:^(id obj,NSUinteger i,Bool *stop) // 用block块遍历 { NSLog(@"%ld ---- %@",i,obj); if(i == 2) *stop = YES; }]; return 0; }
注意问题:
> @[] 只创建不可变数组NSArray,NSMutableArray *array = @[@"jack", @"rose"];是错误写法。
> 数组不能存放nil值;只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等。
三、字典
字典(NSDictionary,NSMutableDictionary)是由键-值对组成的数据集合。通过key来查找value,key可以是任意类型对象,但是其值必须是唯一的。
下面通过代码来看一下基本用法
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { // 创建字典 NSDictionary *dic1 = [NSDictionary dictionaryWithObject:@"Himym.Baratheon" forKey:@"name"]; NSArray *name = @[@"Himym.Baratheon",@20]; NSArray *key = @[@"name",@"age"]; NSDictionary *dic2 = [NSDictionary dictionaryWithObjects:name forKeys:key]; NSDictionary *dic3 = [NSDictionary dictionaryWithObjectsAndKeys:@"Ned.Start",@"name",@20,@"age", nil]; // 快速创建 NSDictionary *dic0 = @{@"name":@"Joffray.Lannister",@"age":@18}; // 注意是大括号 NSLog(@"dic1 = %@\ndic2 = %@\ndic3 = %@\ndic0 = %@",dic1,dic2,dic3,dic0); // 取键值 id obj1 = [dic0 objectForKey:@"name"]; id obj2 = dic1[@"name"]; NSLog(@"%@ --- %@ --- %ld",obj1,obj2,dic0.count); // 创建可变字典 NSMutableDictionary *mdic1 = [NSMutableDictionary dictionary]; // 添加元素 [mdic1 setObject:@"Robb.Stark" forKey:@"name"]; [mdic1 setObject:@17 forKey:@"age"]; [mdic1 setObject:@"He is dead" forKey:@"life"]; [mdic1 setObject:@"Sansa" forKey:@"name"]; // 将原有name覆盖 NSLog(@"%@",mdic1); // 取键值 id obj3 = mdic1[@"name"]; NSLog(@"%@",obj3); // 删除键值对 [mdic1 removeObjectForKey:@"age"]; // 遍历字典 //NSArray *array1 = [mdic1 allValues]; //NSLog(@"%@",array1); for(id obj in [mdic1 allValues]) { NSLog(@"value --- %@",obj); } for(id obj in [mdic1 allKeys]) { NSLog(@"key --- %@",obj); } [mdic1 enumerateKeysAndObjectsUsingBlock:^(id key,id obj,BOOL *stop) { NSLog(@"key: %@ ------ value: %@",key,obj); }]; for(id key in mdic1) { id obj = [mdic1 objectForKey:key]; NSLog(@"value --- %@ key --- %@",obj,key); } // 字典元素的访问 NSArray *person = @[ @{@"name":@"Himym.Baratheon",@"age":@25,@"QQ":@"395696600",@"girlfrends":@[@"NaNa",@"ZhaoChao"]}, @{@"name":@"Joffray.Lannister",@"age":@18}, @{@"name":@"Ned.Stark",@"age":@31}, @{@"name":@"Serse.Lannister",@"age":@24} ]; NSDictionary *ned = person[2]; NSString *nana = person[0][@"girlfrends"][1]; NSArray *girl = person[0][@"girlfrends"]; NSLog(@"%@\n%@\n%@",ned,nana,girl); return 0; }
注意的问题:
> 字典的快速创建是用大括号@{},这点有别于数组的快速创建@[]。并且快速创建只适用于NSDictionary。
> 字典里面的键值对是无序排列的,而数组里的元素是有序的。
相关文章推荐
- (十)黑马程序员——Foundation框架之数组与字典
- 黑马程序员——Foundation框架结构体、字符串、数组
- 黑马程序员——IOS基础——Foundation框架——字典、集合类、NSNumber/NSValue、NSObject、反射
- 黑马程序员——Foundation框架字典、集合类、反射
- 【黑马程序员】【Foundation框架】字典NSDictionary和NSMutableDictionary
- OC中Foundation框架的数组和字典
- 【黑马程序员】【Foundation框架】数组NSArray和NSMutableArray
- 黑马程序员——IOS基础——Foundation框架——结构体、字符串、数组
- 黑马程序员--OC的Foundation框架之字典
- Foundation框架学习2--数组、字典、集合
- NSLog字典和数组打印为中文(Foundation框架类目)
- Object-C Foundation 框架汇总之-数组,字典,集合
- 黑马程序员_OC中的Foundation框架学习
- 黑马程序员_Foundation框架02_NSString
- 黑马程序员-Foundation框架-NSArray
- 黑马程序员-OC学习笔记之Foundation框架NSNumber、NSValue和NSDate
- 黑马程序员_Foundation框架01_结构体
- 黑马程序员_Foundation框架的学习
- 黑马程序员_OC学习之Foundation框架2
- 黑马程序员_OC学习之Foundation框架1