可能上面的标题有些拗口,学过PHP的小伙伴们都知道,PHP中的数组的下标是允许我们自定义的,PHP中的数组确切的说就是键值对。而在OC我们要用字典(Dictionary)来存储,当然了Java用的是Map来存储键值对。下面我们将实现一个极为实用的小例子,网络请求有get和post方法,两种方法各有其优点。在表单提交时Post方法用的更多一些,URL传值则会用到Get方法。在用PHP编程的时候肯定会经常拼接url来传参或者请求,在IOS开发中会向服务器通过url请求一些数据,所以对url的拼接是少不了的,下面不是什么高深的技术,只是OC中集合类的一个小应用模块,欢迎批评指正,转载请注明出处。

在OC中我们如何把字典中的数据拼接成我们要请求的URL字符串呢?下面有一个需求:在一个数组中有多个字典,每个字典中的数据是请求一条URL中的参数,我们需要做的就是把每个字典转换为URL,在把每个URL放在数组中返回。下面的代码还是对数组,字符串和字典的具体的应用。

上面的需求对于熟练操作字典,数组,字符串的小伙伴们应该是小菜一碟吧,今天写出来就是想记录一些学习的点点滴滴,上面的时拼接URL, 下面的博客会URL拆分成字典,敬请期待吧!废话少说,还是代码走起。

1.生成测试数据

字典中的键我们一般是通过宏定义来初始化的,目的是便于维护,提高代码编写效率下面是对key的宏定义:

1
2
3
4
5
//定义字典键
#define A @"a"
#define B @"b"
#define C @"c"
#define D @"d"

​    ​    ​添加测试数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//容纳字符串拼接后的字符串
NSMutableArray *arrayURL = [NSMutableArray new];
 
//存放可变字典的数组
NSMutableArray *arrayDic = [NSMutableArray new];
 
 
//生成测试数据
NSDictionary *dic1 = @{A : @10,
                       B : @20};
 
 
NSDictionary *dic2 = @{A : @10,
                       B : @20,
                       C : @30};
 
 
NSDictionary *dic3 = @{A : @10,
                       C : @30};
//把数组加入字典
[arrayDic addObject:dic1];
[arrayDic addObject:dic2];
[arrayDic addObject:dic3];

​    ​2.接下来我们要做的就是把上面可变数组中的字典中的数据转换为URL,转换的具体过程如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//从数组中取出字典,把每个然后拼接成url
for (int i = 0; i < arrayDic.count; i ++)
{
     
    NSLog(@"对数组中第%d个字典操作\n:%@",i+1 ,arrayDic[i]);
     
    //URL
    NSMutableString *URL = [NSMutableString stringWithFormat:@"http://www.baidu.com"];
    //获取字典的所有keys
    NSArray * keys = [arrayDic[i] allKeys];
     
    //拼接字符串
    for (int j = 0; j < keys.count; j ++)
    {
        NSString *string;
        if (j == 0)
        {
            //拼接时加?
            string = [NSString stringWithFormat:@"?%@=%@", keys[j], arrayDic[i][keys[j]]];
             
        }
        else
        {
            //拼接时加&
            string = [NSString stringWithFormat:@"&%@=%@", keys[j], arrayDic[i][keys[j]]];
        }
        //拼接字符串
        [URL appendString:string];
         
    }
    NSLog(@"第%d个字典转换的URL:%@",i+1, URL);
    //加入数组
    [arrayURL addObject:URL];
     
}

​    ​    ​代码说明:

​    ​    ​    ​1.对数组中的每个字典遍历

​    ​    ​    ​2.对每个字典中的键值对遍历

​    ​    ​    ​3.url中如果是第一个参数拼接时加上?

​    ​    ​    ​4.如果不是第一个参数拼接时加上&

​    ​    ​    ​5.把拼接好的字符串URL加入到可变数组中然后返回存有URL的数组

​    ​    ​最终转换结果为:

1
2
3
4
5
6
2014-08-12 11:41:18.927 HelloOC[997:303] 转换完成:
(
    "http://www.baidu.com?a=10&b=20",
    "http://www.baidu.com?a=10&b=20&c=30",
    "http://www.baidu.com?a=10&c=30"
)

​    ​    ​那么我们应如和把转换后的结再逆向成原来得数据格式呢?下面的博客中会提到相应的方法,谢谢朋友们的支持,不足之处还望批评指正。

Objective-C中把数组中字典中的数据转换成URL的更多相关文章

  1. OC中如何把数组中字典的数据转换成URL?

    在使用objective-c语言开发iOS应用中,会向服务器通过URL请求一些数据,因此对URL的拼接肯定少不了.而在iOS中,我们一般是通过将字典中的数据拼接成我们要请求的URL字符串,那这个是怎么 ...

  2. Sliverlight linq中的数组筛选数据库中的数据

    首先 什么是linq呢 ? LINQ即Language Integrated Query(语言集成查询),LINQ是集成到C#和Visual Basic.NET这些语言中用于提供查询数据能力的一个新特 ...

  3. C#不允许在foreach循环中改变数组或集合中元素的值(注:成员的值不受影响)

    C#不允许在foreach循环中改变数组或集合中元素的值(注:成员的值不受影响),如以下代码将无法通过编译. foreach (int x in myArray) { x++; //错误代码,因为改变 ...

  4. cocos2d-x把json数据解析到数组或字典中(libjson库)

    以前在cocos2d-x项目中用到json解析,集成了libjson库后发现网上提供的解析方法大多是在解析过程中取得值,并没有将解析结果有效的保存起来,于是摸索一番,把解析结果根据数据格式存到数组或字 ...

  5. 浅谈PHP中的数组和JS中的数组

    最近在做前后端对接的时候,遇到一个问题,前端要求返回的数据格式是左边的,但是我通过json_encode返回到的数据格式是右边的   注意:数据格式从"[]"(数组)变成了&quo ...

  6. java:JavaScript3(innerHTML,post和get,单选框,多选框,下拉列表值得获取,JS中的数组,JS中的正则)

    1.innerHTML用户登录验证: <!DOCTYPE> <html> <head> <meta charset="UTF-8"> ...

  7. OC数组和字典中存入niu值

    在NSArray和NSDictionary中nil有特殊的含义.但是某些时候,我们必须要放入nil怎么办? 要想放入nil就必须用到一个类NSNull,这个类只有一个类方法,就是null.[NSNul ...

  8. iOS开发-- 使用NSNumber将int、float、long等数据类型加入到数组或字典中

    // 设置值 NSNumber *number=[NSNumber numberWithInt:45]; // 取值 NSLog(@"NSNumber %d",[number in ...

  9. OC中如何把字典中的数据拼接成url字符串

    在使用objective-c语言开发iOS应用中,会向服务器通过URL请求一些数据,因此对URL的拼接肯定少不了.而在iOS中,我们一般是通过将字典中的数据拼接成我们要请求的URL字符串,那这个是怎么 ...

随机推荐

  1. block和代理小结

    代理使用原则: 代理方法的参数是要传的值,代理方法的返回值是要得到的值(即要调用的类回传的值),并且在实现的代理方法中的值就是原来的类要传的值(设置delegate=self),  比如2个类 A,B ...

  2. ajax 后台正常执行 错误类型却是404

    后台执行importExcel,明明方法执行成功,但是前台却提示404 @RequestMapping("/import") public Json importExcel(@Re ...

  3. 2015-12-21(box-sizing:border-box)

    最近新学了一个方法box-sizing:border-box,可以忽略margin,padding,border等所要占的位置,比如,你在做响应式网页时,当你所做的网页宽度是符合当前电脑屏幕宽度时,但 ...

  4. 理解PagerAdapter的instantiateItem()方法

    在为ViewPager设置Adapter时肯定会用到PagerAdapter,Google Android文档对该类的定义如下: Base class providing the adapter to ...

  5. tableViewCell嵌套collectionView,动态高度

    方法有很多,有通过内容高度,经过代理回调,刷新的,甚至还有计算cell个数,然后根据cell大小计算的,这里推荐iOS 8新特性,通过AutoLayout,利用内容将cell撑起来; 关键代码: vi ...

  6. 关于pl/sql数据库下拉中选项为空的问题

    1.可能是在配置环境变量TNS_ADMIN的时候后面多了一个分号,去掉分号就可以了

  7. 如何给GridView添加网格

    如何给gridview的单元格加上分割线 原文链接:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/1227/1582.html ...

  8. 使用Dotfuscator 进行.Net代码混淆 代码加密的方法

    混淆代码能在一定程度上放置代码被盗用,保护我们的知识产权 1.打开vs2012,选择工具-〉Dotfuscator Software Services 2.选择你需要混淆的DLL 文件,可以多选择 3 ...

  9. linux进程管理(上)

    程序和进程的区别: 1.程序是一种静态资源 程序启动产生进程 2.程序与进程无一一对应原则  进程是动态的一个过程 父进程和子进程在前面提过 前台进程:执行命令时只能等待的进程为前台进程也叫异步进程 ...

  10. 一张图解释SQL Server集群、镜像、复制、日志传送

    一张图解释SQL Server集群.镜像.复制.日志传送 本文版权归作者所有,未经作者同意不得转载.