//
// main.m
// OC05 字典、集合、数组排序
//
// Created by xalo on 15/10/30.
// Copyright (c) 2015年 康大亮. All rights reserved.
//
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
#pragma mark -字典类
/*
1、字典就是关键字以及存储的数值的集合,字典在每个给定的关键字下存储一个数值。关键字称为key,数值称为value,合成键值对。因此字典就是管理多个键值对的集合。字典可以管理多个键值对。
2、key常常是NSString类型的字符串(也可用int类型的数),但是value必须是对象
3、键值对在字典中是没有顺序的
4、字典的key不能重复,否则在取值是,会产生歧义
5、如果有大量数据或频繁查找信息时,使用字典效率较高
*/
#pragma mark --创建一个不可变字典NSDictionary
/* 1.这种方式创建的字典需要写“一个value+一个key”这样的顺序添加键值对。
* 2.向字典中添加键值对时,value可以为空,但是不能存在value没有key对应的情况。(也就是:key-value必须成对出现)。
*/
NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"jiMIng", @"name", @"M", @"gender", nil];
NSLog(@"%@", dict);
/* 结果:{
gender = M;
name = jiMIng;
}*/
#pragma mark --使用数组创建字典对象
// 创建出key值数组
NSArray *keyArray = [NSArray arrayWithObjects:@"name", @"age", @"hobby", nil];
// 创建出value值数组,value值的数组元素必须和key数组元素一一对应
NSArray *valueArray = [NSArray arrayWithObjects:@"riTian", @"23", @"fuckSky", nil];
// 使用数组创建字典的方法创建字典对象
NSDictionary *dict1 = [[NSDictionary alloc] initWithObjects:valueArray forKeys:keyArray];
NSLog(@"%@", dict1);
#pragma mark --使用一个已知的字典创建新字典
NSDictionary *dict2 = [[NSDictionary alloc] initWithDictionary:dict1];
NSLog(@"%@", dict2);
#pragma mark --创建一个可变字典
NSMutableDictionary *mDict = [NSMutableDictionary dictionaryWithDictionary:dict2];
NSLog(@"%@", mDict);
#pragma mark -字典的操作
#pragma mark --获取所有的key值,返回值是数组类型
NSArray *keyArray1 = [mDict allKeys];
NSLog(@"%@", keyArray1);
#pragma mark --获取所有的value值,返回值是数组类型
NSArray *valueArray1 = [mDict allValues];
NSLog(@"%@", valueArray1);
#pragma mark --通过key值取value
id value = [mDict objectForKey:@"name"]; // 由于不知道所取的value是什么类型,所以使用id泛型,且使用%@输出
NSLog(@"%@", value);
#pragma mark --给可变字典添加键值对方法
[mDict setObject:@"HighNewArea" forKey:@"address"];
NSLog(@"%@", mDict);
#pragma mark --修改可变字典的value方法
// 修改可变字典的value和给字典添加新建值对的方法一样。如果key值以前没有,则该方法是删除方法,如果key值之前存在,则该方法是修改value方法
[mDict setObject:@"0" forKey:@"age"];
NSLog(@"%@", mDict);
#pragma mark --删除可变字典的键值对方法
// 根据key值来删除key所对应的value
[mDict removeObjectForKey:@"age"];
NSLog(@"%@", mDict);
// 将若干个key封装在一个数组中,然后作为参数传入,删除方法会根据数组中的key是年初对应的value
[mDict removeObjectsForKeys:[NSArray arrayWithObjects:@"address", @"hobby", nil]];
NSLog(@"%@", mDict);
#pragma mark --删除可变字典中的全部value
[mDict removeAllObjects];
NSLog(@"%@", mDict);
#pragma mark -字典的遍历
// 创造一个字典
NSDictionary *dict0 = [NSDictionary dictionaryWithObjectsAndKeys:@"1", @"a", @"2", @"b", @"3", @"c", @"4", @"d", @"5", @"e", nil];
NSLog(@"字典顺序%@", dict0);
// 遍历
// 1、获取到所有的key,并且拿到key的个数
// NSArray *allKeys = [dict0 allKeys];// 【注意】使用allkeys方法取key值,并不是按照打印字典key-value的顺序取值的!
NSArray *allKeys = dict0.allKeys; // .语法
NSLog(@"所有的key:%@", allKeys);
// 2、使用for循环遍历字典
for (int i = 0; i < [allKeys count]; i++) {
//2.1 获取到key
NSString *key = [allKeys objectAtIndex:i];
//2.2 根据获取到的key访问value
NSString *value = [dict0 objectForKey:key];
NSLog(@"key = %@, value = %@", key, value);
}
// lianxi:使用字典表示一个城市的区,区名和人口数
NSDictionary *yanTaArea = [NSDictionary dictionaryWithObjectsAndKeys:@"yanTaArea", @"areaName", @"100000", @"peopleCount", nil];
NSLog(@"%@", yanTaArea);
NSDictionary *xinChengArea = [NSDictionary dictionaryWithObjectsAndKeys:@"xinChengArea", @"areaName", @"200000", @"peopleCount", nil];
NSLog(@"%@", xinChengArea);
// 用字典表示一个城市:城市名和所有的市区
//
NSArray *arrayCity = [NSArray arrayWithObjects:yanTaArea, xinChengArea, nil];
NSDictionary *xiAnCity = [NSDictionary dictionaryWithObjectsAndKeys:arrayCity, @"xiAnCity", nil];
NSLog(@"%@", xiAnCity);
// 定义一个渭南city
NSDictionary *weiNanCity = [NSDictionary dictionary];
// 使用字典表示一个省:省的名称和所有的城市
// 将两个城市字典作为数组元素存进数组元素里
NSArray *cityArray = [NSArray arrayWithObjects:xiAnCity, weiNanCity ,nil];
// 创建省份字典
NSDictionary *provinceDict = [NSDictionary dictionaryWithObjectsAndKeys:@"shanXi", @"provinceName",cityArray,@"cityName", nil];
NSLog(@"%@", provinceDict);
return 0;
}