一、区别

在工作中经常遇到C#数组、ArrayList、List、Dictionary存取数据,其区别和优劣势为:

初始化

数组:

int[] buff = new int[6];

ArrayList:

ArrayList buff = new ArrayList();

List:

List<int> buff = new List<int>();

Dictionary:

Dictionary<int,string> buff = new Dictionary<int,string>;

分析比较

  从上面初始化的几种类型可以看出,他们都属于引用类型。其中数组、List、Dictionary在初始化的时候需要指定其元素类型,而ArrayList不需要指定类型。而在其中只有数组在初始化时设置了其大小。

  数组:在初始化时必须指定其大小和类型,他在内存中是连续存储的,所以可以看出数组的索引速度是非常快的。在确定了数组的长度和类型后,选择数组存储数据是比较好的选择。不适合插入操作。

  ArrayList:在初始化的时候不需要指定其大小和类型。他可以存储不同的数据类型,但是在存取得过程中会引起装箱和拆箱,降低了性能。插入操作方便。

  List:在初始化的时候必须指定其类型,但是不需要指定大小,所以他不会像ArraryList那样在存取过程中引起装箱和拆箱操作。在类型相同的情况下,List和数组的性能相当。插入操作方便。

  Dictionary:在初始化的时候也必须指定其类型,而且他还需要指定一个Key,并且这个Key是唯一的。正因为这样,Dictionary的索引速度非常快。但是也因为他增加了一个Key,Dictionary占用的内存空间比其他类型要大。他是通过Key来查找元素的,元素的顺序是不定的。下图比较列表

二、目前我的使用

1.目前我用于接口中返回移动端所需要的数据,一般是先把数据放在DataTable中,然后再把DataTable放在Dictionary中,例如:

    {
"result_status": true,
"result_msg": "请求成功",
"result_data": [{
"UserName": "推送测试",
"Signer": ,
"Finish": ,
"Options": "",
"SealWord": "A",
"SignDate": "",
"Sign": ,
"Flow": ,
"EnableSign":
}]
}

2.后来Dictionary发现能放各种东西,而且是啥都能放,,,,于是开始往里面嵌套Dictionary

3.深入研究后需要往DataTable里插入信息,于是研究出先把DataTable转成Dictionary再遍历Dictionary再插入信息,还是先放转Dictionary方法吧

     /// <summary>
/// 转换Datatable为List<Dictionary<string, object>>
/// </summary>
/// <param name="dt">Datatable</param>
/// <returns></returns>
public static List<Dictionary<string, object>> ConvertToListDictionary(DataTable dt)
{
List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
foreach (DataRow dr in dt.Rows)
{
Dictionary<string, object> dic = new Dictionary<string, object>();
foreach (DataColumn dc in dt.Columns)
{
dic.Add(dc.ColumnName, dr[dc.ColumnName]);
}
list.Add(dic);
}
return list;
}

然后遍历一下:就可以往里面放信息了

foreach (var x in listdicData)
{
dt2 = DbHelperSQL.Query(sql2 + x["Id"] + orderBy2).Tables[];
x.Add("data_Detail", dt2);
}

放个效果例子吧还是:

    {
"result_status": true,
"result_Type": "总的合同付款审批台账",
"result_msg": "请求成功",
"result_data": {
"data_listMain": [{
"Id": ,
"AddDate": "2018-06-14T17:29:02.887",
"AddUserId": ,
"ContractNum": "",
"ContractAndName": "第二合同",
"BargainMoney": 3000.00,
"ContractXDMan": "",
"BargainSignDate": "",
"BargainFile": "",
"FilesCount": 222.0,
"SYmoney": 2778.0,
"data_Detail": [{
"Id": ,
"Issue": "第5期",
"Finish": "审批中"
}, {
"Id": ,
"Issue": "第6期",
"Finish": "审批中"
}]
}, {
"Id": ,
"AddDate": "2018-06-14T18:11:00.607",
"AddUserId": ,
"ContractNum": "",
"ContractAndName": "第一合同",
"BargainMoney": 200.00,
"ContractXDMan": "",
"BargainSignDate": "",
"BargainFile": "",
"FilesCount": 222.0,
"SYmoney": -22.0,
"data_Detail": [{
"Id": ,
"Issue": "第4期",
"Finish": "审批完"
}]
}],
"data_count":
}
}

emm还有什么呢?后面再补充吧~

最后附加一个:Word转Pdf方法(官方原生态方法,效果非常好)吧https://www.cnblogs.com/ggll611928/p/9019439.html

C#Dictionary使用记录的更多相关文章

  1. 【MySQL】InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

    参考:http://my.oschina.net/sansom/blog/179116 参考:http://www.jb51.net/article/43282.htm 注意!此方法只适用于innod ...

  2. 面向对象编程笔记--static

    通过static方法,提供静态的不需要实例化即可访问的方法或属性.所有的调用者可以使用同一个类(不实例化)或对象(只实例化一次),可以应用的场景: 1)各个调用者共享数据,协同工作. 2)对象只可以实 ...

  3. parquet列式文件实战

    前言 列式文件,顾名思义就是按列存储到文件,和行式存储文件对应.保证了一列在一个文件中是连续的.下面从parquet常见术语,核心schema和文件结构来深入理解.最后通过java api完成writ ...

  4. 共享表空间VS独立表空间

    基础概念:共享表空间 VS 独立表空间 [共享表空间] 又称为system tablespace系统表空间,a small set of data files (the ibdata files) . ...

  5. MySQL Innodb数据库误删ibdata1后MySQL数据库的恢复案例

      上周,以前公司的同事朋友找我帮忙,看看能否帮忙恢复一个MySQL 数据库,具体情况为:数据库版本为MySQL 5.6(具体版本不清楚),也不清楚具体的数据库引擎; 没有数据库备份,只剩下数据库下面 ...

  6. Lecture 2

    1. Coordinate(坐标) data for GIS real coordinate system:Cartesian coordinate systems(笛卡尔坐标系) from 3D t ...

  7. Elastic Search中normalization和分词器

    为key_words提供更加完整的倒排索引. 如:时态转化(like | liked),单复数转化(man | men),全写简写(china | cn),同义词(small | little)等. ...

  8. oracle数据字典视图

    数据字典的概念       还记得我们在手工建库的时候,运行的两个脚本文件.一个是catalog.sql,另一个是catproc.sql.catalog.sql是用来创建数据库的内部字典表的.catp ...

  9. 【转】Elasticsearch学习笔记

    一.常用术语 索引(Index).类型(Type).文档(Document) 索引Index是含有相同属性的文档集合.索引在ES中是通过一个名字来识别的,且必须是英文字母小写,且不含中划线(-):可类 ...

随机推荐

  1. Windows2008 Server r2 64位显示桌面图标的方法

    点击桌面左下方的开始菜单,在搜索框中输入“icon”,如下图所示: 点击:显示或隐藏桌面上的通用图标,然后弹出如下图: 应用并确定即可!

  2. Hadoop安装教程【转】

    原贴:http://www.powerxing.com/install-hadoop/ 当开始着手实践 Hadoop 时,安装 Hadoop 往往会成为新手的一道门槛.尽管安装其实很简单,书上有写到, ...

  3. PHP实现微信发红包功能2

    <?php class wxPay { //配置参数信息 const SHANGHUHAO = "1430998xxx";//商户号 const PARTNERKEY = & ...

  4. Odoo作为App后端时如何调试App

    转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9307340.html  一:Odoo可以作为app后台+后台管理系统使用 Odoo作为一个可供二次开发的框架, ...

  5. DDOS攻击详解

    导读 Ddos的攻击方式有很多种,最基本的Dos攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应. 在信息安全的三要素——“保密性”.“完整性”和“可用性”中,DoS( ...

  6. JAVA框架 Spring AOP--切入点表达式和通知类型

    一:AOP的相关术语: 1)Joinpoint(连接点):所谓的连接点是指那些可以被拦截点,在spring中这些点是指方法.因为在spring中支持方法类型的连接点. 2)Pointcut(切入点): ...

  7. flask 蓝本(blueprint)

    蓝本(blueprint) 一.基本概念: 将视图方法模块化,既当大量的视图函数放在一个文件中,很明显是不合适,最好的方案是根据功能将路由合理的划分到不同的文件中:而蓝本就是为了解决这个问题而出现的. ...

  8. Android 绘图时实现双缓冲

    一.双缓冲技术原理: 在内存中创建一片内存区域,把将要绘制的图片预先绘制到内存中,在绘制显示的时候直接获取缓冲区的图片进行绘制.更具体一点来说:先通过setBitmap方法将要绘制的所有的图形绘制到一 ...

  9. array_multisort函数,以及多维数组下排序的应用,并与usort函数对比

    以前比较少用这个函数,大部分自己接触的业务里,处理稍微大一些的数组的时候几乎都是从db里取出来的,在db里就order by了. 最近倒是用了次,这个函数用来排序很强大,有点类似于sql中的order ...

  10. 第9章 初识STM32固件库

    第9章     初识STM32固件库 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fire ...