//练习1:参数拼接
//给定一个字典,键值对数目不确定,请拼接成拼接成如下的url形式
//注意:字典param中的键值对可能非常多
//多个参数连接使用 &符号,最后一个参数后没有 &符号
//NSString *url = @"www.weibo.com?username=yang&sex=m&tel=1770&.....&fans=100000";
//最后拼成类似上面的url打印出来
// NSString *host = @"www.weibo.com";
// NSDictionary *param = @{@"username":@"yang",@"sex":@"m",@"tel":@"1770",@"password":@"123456",@"isVip":@"1",@"fans":@"10000"};
// //方法一:可变字符串
// //将host转变成可变字符串str1
// NSMutableString *str1 = [NSMutableString stringWithString:host];
// //在str1后追加?
// [str1 appendString:@"?"];
//
// NSArray *key = [param allKeys];
// //遍历所有的关键字
// for (int i =0 ; i < key.count; i++) //arr.count 就是字典中那个有多少个关键子字
// {
// NSString *value = [param objectForKey:key[i]]; //根据相应的key找出value
// // NSLog(@"%@", value);
//
// [str1 appendString:key[i]]; //添加第一个关键字
// [str1 appendString:@"="]; //添加=
// [str1 appendString:value]; //添加第一个键值
// [str1 appendString:@"&"]; //添加&
// }
// [str1 deleteCharactersInRange:NSMakeRange(str1.length-1, 1)];
// NSLog(@"%@", str1);
//方法二:可变字符串
// NSMutableString *mstr = [[NSMutableString alloc]initWithString:host];
// [mstr appendString:@"?"];
// NSArray *keys = [param allKeys];
// for (int i=0; i<keys.count; i++)
// {
// NSString *key = keys[i];//取得某一个Key
// NSString *value = param[key];//取得对应的值
// if (i==keys.count-1) {//最后一个key,参数后面没有&符号
// [mstr appendFormat:@"%@=%@",key,value];
// }
// else
// {
// [mstr appendFormat:@"%@=%@&",key,value];
// }
//
// }
// NSLog(@"mstr = %@",mstr);
//练习2:参数解析
//给定一个很长的url(见代码)可能包含多个形如:tel=1770 的参数
//要求,解析出该url中所有的 xxx = mmm形式的参数并且把 xxx作为一个键值对的key ,mmm作为一个键值对的value,把 所有的key 和 value放入到 同一个字典中
//最后打印该包含所有key和value参数的字典
//注意tel=1770类似的表达式可能无限多,个数不确定
//方法1:
// NSString *url = @"www.weibo.com?username=yang&sex=m&tel=1770&password=123456&fans=100000&isVip=1&days=200";
// //以?为分割符将 URL 分割为两个数组
//方法1:
// NSArray *arr1 = [url componentsSeparatedByString:@"?"];
// //以&为分割,分割第二个数组
// NSArray *arr2 = [arr1[1] componentsSeparatedByString:@"&"]; // [arr1 lastObject]=arr1[1]
// //定义一个可变字典,大小为10
// NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithCapacity:10];
//
//
// for (int i = 0; i < [arr2 count]; i++)
// {
// //定义一个数组将遍历arr2并以=为分割符分割
// NSArray *arr3 = [arr2[i] componentsSeparatedByString:@"="];
// [dic setObject:arr3[1] forKey:arr3[0]];
// }
//
// NSLog(@"%@", dic);
//方法2:
// NSArray *arr1 = [url componentsSeparatedByString:@"?"];//第一次使用?号分割
// NSString *str2 = [arr1 lastObject];//等价于 arr1[1]
//
// NSArray *arr2 = [str2 componentsSeparatedByString:@"&"];
// NSMutableDictionary *mdic = [NSMutableDictionary new];
// for (NSString *param in arr2)
// {
// //第三次分割,把 username=yang这样的式子分割
// NSArray *arr3 = [param componentsSeparatedByString:@"="];
// NSString *key =[arr3 firstObject];//等价于arr3[0]
// NSString *value = [arr3 lastObject];
// [mdic setObject:value forKey:key];
//
// }
// NSLog(@"mdic = %@",mdic);
//
//
//3.模拟网络数据解析
//obj是通过Tool方法模拟从网络获取的数据
//通过对字典和数组,字符串的掌握和应用,请获取obj中所有的信息
//要求:根据obj打印出的数据格式,解析obj中的数据
//每一行要求按照如下格式打印出来(不能直接打印字典)
// name:zhang,sex:0,tel:1870 (这三者的顺序不要求可以改变)
// name:yang,sex:1,tel:1770
//...
//注意obj打印结果中,圆括号代表数组,花括号代表字典;
//已知条件如下,下面的代码不可以修改
//我的代码
// id obj = [Tool fetchObject1];
// NSLog(@"%@",obj);
// 方法1:
// for (NSDictionary *dic in obj) //从obj中每次取一个字典
// {
// //定义一个可变字符串并且把初始容量设为10
// NSMutableString *str1 = [NSMutableString stringWithCapacity:10];
// //定义一个数组,取出字典中的所有key
// NSArray *key=[dic allKeys];
//
// NSArray *arr = [dic allKeys];
// for (NSMutableString *str in arr)
// {
// [str1 appendString:str];
// [str1 appendString:@":"];
// NSString *str4 = [NSString stringWithFormat:@"%@",dic[str]];
// [str1 appendString:str4];
// [str1 appendString:@","];
// }
// [str1 deleteCharactersInRange:NSMakeRange(str1.length-1, 1)];
// NSLog(@"%@", str1);
// }
//方法2 :
// NSArray *arr4 = obj;//把obj的类型转换为NSArray
// for (NSDictionary *dic in arr4)//遍历数组的每一个字典
// {
// NSMutableString *mstr = [NSMutableString new];//每一个字典对应一个字符串
// NSArray *keys = [dic allKeys];//某一个字典的keys
// for (int i=0;i<keys.count;i++)//遍历每一个字典
// {
// NSString *key1 = keys[i];//拿到字典的某一个key
// NSString *value = dic[key1];
// if (i==keys.count-1) {//字典的最后一个key,没有逗号
// [mstr appendFormat:@"%@:%@",key1,value];
// }
// else{
// [mstr appendFormat:@"%@:%@,",key1,value];
// }
// }
// NSLog(@"%@",mstr);
// }
// //4.模拟网络数据解析2
// //解析obj2并打印,具体要求同题目3
// //已知条件如下,下面的2行代码不可修改
// id obj2 = [Tool fetchObject2];
// NSLog(@"%@",obj2);
// 方法1:
// NSArray *arr = [obj2 allKeys];
// NSArray *arr1 = [obj2 objectForKey:arr[1]];
//
// for (NSDictionary *dic in arr1)
// {
// NSMutableString *str1 = [NSMutableString stringWithCapacity:10];
// NSArray *arr2 = [dic allKeys];
// for (NSMutableString *str in arr2)
// {
// [str1 appendString:str];
// [str1 appendString:@":"];
// NSString *str4 = [NSString stringWithFormat:@"%@",dic[str]];
// [str1 appendString:str4];
// [str1 appendString:@","];
// }
// [str1 deleteCharactersInRange:NSMakeRange(str1.length-1, 1)];
// NSLog(@"%@", str1);
// }
//方法2:
// id obj2 = [Tool fetchObject2];
// NSDictionary *dic5=obj2;
// NSArray *data=dic5[@"data"];
// for (NSDictionary *dic in data)
// {
// NSMutableString *mstr = [NSMutableString new];//每一个字典对应一个字符串
// NSArray *keys = [dic allKeys];//某一个字典的keys
// for (int i=0;i<keys.count;i++)//遍历每一个字典
// {
// NSString *key1 = keys[i];//拿到字典的某一个key
// NSString *value = dic[key1];
// if (i==keys.count-1) {//字典的最后一个key,没有逗号
// [mstr appendFormat:@"%@:%@",key1,value];
// }
// else{
// [mstr appendFormat:@"%@:%@,",key1,value];
// }
// }
// NSLog(@"%@",mstr);
// }
//规律总结:打印数据时,花括号代表字典,字典的每一个元素使用分号结尾.
//圆括号代表数组,数组的每一个元素使用逗号结尾.