您的位置:首页 > 移动开发 > Objective-C

Objective-C语言——NSDictionary不可变字典

2015-12-16 09:43 597 查看
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
@autoreleasepool {

/*
字典  NSDictionary / NSMutableDictionary
1.概念:字典是关键字'key'及其定义的值'value'所构成的集合,即它是由key-value组成的键值对的集合。通常来讲,'key'一般是'NSString'类型的,'value'是OC中任意对象。对于字典来讲,我们就是通过'key'来访问'value'。
2.为什么在有了数组后,还需要字典?在由大量的数据或者频繁查找信息,使用字典效率更高。因为字典是采用键查询的优化存储方法的。
3.在OC中我们使用'NSDictionary' 和 'NSMutableDictionary'来表示字典。其中'NSMutableDictionary' 是 'NSDictionary'的子类
*/

//初始化
//创建一个空的字典
NSDictionary *dictionary1 = [[NSDictionary alloc]init];

NSDictionary *dictionary2 = [NSDictionary dictionary];

//创建一个键值对的字典
NSDictionary *dictionary3 = [NSDictionary dictionaryWithObject:@"Rick" forKey:@"name"];

//创建多个键值对的字典
NSDictionary *dictionary4 = [NSDictionary dictionaryWithObjectsAndKeys:@"Rick",@"name",@25,@"age",@"GZ",@"address", nil];

//字典里面存放的元素都要是对象类型才行。如果是基本数据类型,要先把这些基本数据类型进行封装,然后在放到这些集合里。

//value在前,key 在后,value 和 key 要成双出现
NSLog(@"dictionary4 = %@",dictionary4);
//注意:在字典中键值是无序的

//根据一个字典创建一个字典
NSDictionary *dictionary5 = [NSDictionary dictionaryWithDictionary:dictionary4];
NSLog(@"dictionary5 = %@",dictionary5);

//新语法创建字典
NSDictionary *dictionary6 = @{};
//新语法创建一个键值对
NSDictionary *dictionary7 = @{@"name":@"Rick"};
//新语法创建多个键值对
NSDictionary *dictionary8 = @{@"name":@"Rick",@"age":@25,@"address":@"GZ"};

NSLog(@"dictionary8 = %@",dictionary8);

//从本地读取字典
NSDictionary *dictionary9 = [NSDictionary dictionaryWithContentsOfFile:@""];

//从网络读取字典
NSDictionary *dictionary10 = [NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@""]];

//字典中键值对的数量
NSUInteger count = dictionary4.count;
//        NSLog(@"count = %lu",count);

//如何访问字典
//通过key访问字典中对应的值
NSString *name = [dictionary4 objectForKey:@"name"];
NSLog(@"name = %@",name);

//新语法
NSString *newName = dictionary4[@"name"];
NSLog(@"newName = %@",newName);

//如何遍历字典中所有的值
//表示字典中所有的key
NSArray *keysArray = dictionary4.allKeys;
NSLog(@"keysArray = %@",keysArray);

//字典中所有的value
NSArray *valuesArray = dictionary4.allValues;
NSLog(@"valuesArray = %@",valuesArray);

//使用for循环来打印
for (int i = 0; i < valuesArray.count; i++) {
//            NSLog(@"%@ = %@",keysArray[i],valuesArray[i]);
//            NSLog(@"%@ = %@",keysArray[i],[dictionary4 objectForKey:keysArray[i]]);
NSLog(@"%@ = %@",keysArray[i],dictionary4[keysArray[i]]);
}

//使用快速枚举
for (NSString *key in keysArray)
{
//            NSLog(@"%@ = %@",key,[dictionary4 objectForKey:key]);
NSLog(@"%@ = %@",key,dictionary4[key]);
}

//使用枚举器遍历
NSEnumerator *enumerator = [keysArray objectEnumerator];
NSString *key;
while (key = [enumerator nextObject])
{
NSLog(@"%@ = %@",key,dictionary4[key]);
}

//在不可变字典中不能存储相同的key,如果相同的key,则只会打印一个key对应的value
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"Rick",@"name",@25,@"age",@"GZ",@"address",@"Jack",@"name", nil];

NSLog(@"------------------");
for (NSString *key in [dictionary allKeys])
{
NSLog(@"%@ = %@",key,dictionary[key]);
}

}
return 0;
}


运行结果

2015-12-16 09:51:45.148 OC_06_01[7024:252081] dictionary4 = {
address = GZ;
age = 25;
name = Rick;
}
2015-12-16 09:51:45.149 OC_06_01[7024:252081] dictionary5 = {
address = GZ;
age = 25;
name = Rick;
}
2015-12-16 09:51:45.149 OC_06_01[7024:252081] dictionary8 = {
address = GZ;
age = 25;
name = Rick;
}
2015-12-16 09:51:45.256 OC_06_01[7024:252081] name = Rick
2015-12-16 09:51:45.257 OC_06_01[7024:252081] newName = Rick
2015-12-16 09:51:45.257 OC_06_01[7024:252081] keysArray = (
name,
age,
address
)
2015-12-16 09:51:45.258 OC_06_01[7024:252081] valuesArray = (
Rick,
25,
GZ
)
2015-12-16 09:51:45.258 OC_06_01[7024:252081] name = Rick
2015-12-16 09:51:45.258 OC_06_01[7024:252081] age = 25
2015-12-16 09:51:45.259 OC_06_01[7024:252081] address = GZ
2015-12-16 09:51:45.259 OC_06_01[7024:252081] name = Rick
2015-12-16 09:51:45.259 OC_06_01[7024:252081] age = 25
2015-12-16 09:51:45.259 OC_06_01[7024:252081] address = GZ
2015-12-16 09:51:45.259 OC_06_01[7024:252081] name = Rick
2015-12-16 09:51:45.259 OC_06_01[7024:252081] age = 25
2015-12-16 09:51:45.260 OC_06_01[7024:252081] address = GZ
2015-12-16 09:51:45.260 OC_06_01[7024:252081] ------------------
2015-12-16 09:51:45.260 OC_06_01[7024:252081] age = 25
2015-12-16 09:51:45.260 OC_06_01[7024:252081] name = Rick
2015-12-16 09:51:45.260 OC_06_01[7024:252081] address = GZ
Program ended with exit code: 0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: