在使用objective-c语言开发iOS应用中,会向服务器通过URL请求一些数据,因此对URL的拼接肯定少不了。而在iOS中,我们一般是通过将字典中的数据拼接成我们要请求的URL字符串,那这个是怎么实现的呢?今天小编就将为大家分享一篇在网上看到的一位大神对Objective-C中把数组字典的数据转换成URL的剖析,一起来看看吧。

1.生成测试数据

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

//定义字典键

#define A @"a"

#define B @"b"

#define C @"c"

#define D @"d"

添加测试数据

//容纳字符串拼接后的字符串

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];

//容纳字符串拼接后的字符串

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};

//把数组加入字典

[arrayDicaddObject:dic1];

[arrayDicaddObject:dic2];

[arrayDicaddObject:dic3];

2、数据转换成URL

 

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

//从数组中取出字典,把每个然后拼接成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];

}

//从数组中取出字典,把每个然后拼接成url

for (int i = 0; i < arrayDic.count; i ++)

{

NSLog(@"对数组中第%d个字典操作n:%@",i+1 ,arrayDic[i]);

//URL

NSMutableString *URL = [NSMutableStringstringWithFormat:@"http://www.baidu.com"];

//获取字典的所有keys

NSArray * keys = [arrayDic[i]allKeys];

//拼接字符串

for (int j = 0; j < keys.count; j ++)

{

NSString *string;

if (j == 0)

{

//拼接时加?

string = [NSStringstringWithFormat:@"?%@=%@", keys[j], arrayDic[i][keys[j]]];

}

else

{

//拼接时加&

string = [NSStringstringWithFormat:@"&%@=%@", keys[j], arrayDic[i][keys[j]]];

}

//拼接字符串

[URLappendString:string];

}

NSLog(@"第%d个字典转换的URL:%@",i+1, URL);

//加入数组

[arrayURLaddObject:URL];

}

代码说明:

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

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

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

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

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

最终转换结果为:

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"

)

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 的实现方法,如果大家看后赶脚还比较虚的话,建议根据上面的介绍,自己动手实现下。

相关文章:《12套swift学习资源分享

OC中如何把数组中字典的数据转换成URL?的更多相关文章

  1. PHP中如何在数组中随机抽取n个数据的值 - array_rand()?

    PHP中如何在数组中随机抽取n个数据的值? 最佳答案 array_rand() 在你想从数组中取出一个或多个随机的单元时相当有用.它接受 input 作为输入数组和一个可选的参数 num_req,指明 ...

  2. 4.产生10个1-100的随机数,并放到一个数组中 (1)把数组中大于等于10的数字放到一个list集合中,并打印到控制台。 (2)把数组中的数字放到当前文件夹的numArr.txt文件中

    package cn.it.text; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayLis ...

  3. Objective-C中把数组中字典中的数据转换成URL

    可能上面的标题有些拗口,学过PHP的小伙伴们都知道,PHP中的数组的下标是允许我们自定义的,PHP中的数组确切的说就是键值对.而在OC我们要用字典(Dictionary)来存储,当然了Java用的是M ...

  4. C#中判断一个数组中是否存在某个数组值 及相关

    声明:reference:http://www.cnblogs.com/icebutterfly/archive/2010/06/22/1762738.html:http://blog.csdn.ne ...

  5. js中关于一个数组中最大、最小值以及它们的下标的输出的一种解决办法

    今天在学习js中的数组时,遇到的输出一个数组中最大.最小值以及它们的下表,以下是自己的解决方法! <script type="text/javascript"> var ...

  6. C#中如何向数组中动态添加元素

    转自:https://blog.csdn.net/qq_35938548/article/details/78325558 背景:现需要向数组中循环插入字符串,但C#中的数组是不支持动态添加元素的,只 ...

  7. Js中的字符串/数组中常用的操作

    JS为每种数据类型都内置很多方法,真的不好记忆,而且有些还容易记混,现整理如下,以便以后查看: 一.String ①charAt()方法用于返回指定索引处的字符.返回的字符是长度为 1 的字符串. 语 ...

  8. java中list或数组中随机子集工具类

    package com.example.demo.test; import java.util.ArrayList;import java.util.Arrays;import java.util.L ...

  9. C语言:对传入sp的字符进行统计,三组两个相连字母“ea”"ou""iu"出现的次数,并将统计结果存入ct所指的数组中。-在数组中找出最小值,并与第一个元素交换位置。

    //对传入sp的字符进行统计,三组两个相连字母“ea”"ou""iu"出现的次数,并将统计结果存入ct所指的数组中. #include <stdio.h& ...

随机推荐

  1. Linux crontab命令的使用方法

    crontab命令常见于Unix和Linux的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中,以供之后读取和执行. 在 ...

  2. Scrum Meeting (Oct. 27 2014)

    软件工程是一门十分有意思的课程,它不仅锻炼了我们开发软件的能力,更是给了我们结队作业的机会,在团队协作中,我们学会了欣赏别人,学会了品鉴自己,学会了如何集思广益凝聚成一个锐意进取的集体.继单人单词查询 ...

  3. C# 从excel里面复制的1万6千多条记录粘贴到FCKeditor里面,点保存的时候,保存不了,页面没有反应

    客户那边添加公告,是直接从excel里面复制的,有1万6千多条记录,excel文件有6M多. 编辑器用的FCKeditor,也能粘贴上,就是点保存的时候,执行了一段时间就没有反映了,保存不了. 想着可 ...

  4. zendstudio 声明变量类型,让变量自动方法提示

    zendstudio 行内注释, 显式声明变量类型,让变量自动方法提示 $out = []; /* @var $row \xxyy\SizeEntity */ foreach ($rows[ 'lis ...

  5. Daily Scrum 12.1

    今日完成任务: 完成了对源代码结构的修改,删除冗余等:和其他小组讨论了关于整合的问题,向其他小组介绍自己小组使用的数据库等. 明日任务: 晏旭瑞 初步完成文档上传下载 孙思权 深入了解数据库中每个表, ...

  6. framebuff 显示子系统

     #include <unistd.h> #include <stdio.h> #include <fcntl.h> #include <linux/fb.h ...

  7. [转载]tail No space left on device

    转载http://www.chenxie.org/?p=717 # tail -f ../logs/catalina.outtail: cannot watch `../logs/catalina.o ...

  8. 浅谈.Net WebService开发

    一.什么是WebService: 简单通俗来说,就是企业之间.网站之间通过Internet来访问并使用在线服务,一些数据,由于安全性问题,不能提供数据库给其他单位使用,这时候可以使   用WebSer ...

  9. 如何让chrome始终运行插件

    使用chrome可能有时候会拦截比如阿里旺旺和腾讯等的登录插件,那么怎么才始终允许,而不需要每次确认呢.下面. 1. 打开Chrome浏览器. 在地址栏中输入 chrome://plugins 回车 ...

  10. sql2008日志文件截断

    日志文件比较大时,使用语句减少大小. USE DATABASENAME;GO-- Truncate the log by changing the database recovery model to ...