您的位置:首页 > 职场人生

黑马程序员-Foundation框架之数组和字典

2014-10-10 15:25 295 查看
一、Foundation框架简介

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。

> 字典里面的键值对是无序排列的,而数组里的元素是有序的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: