一、区别
在工作中经常遇到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": 25, "Finish": 5, "Options": "", "SealWord": "A", "SignDate": "", "Sign": 0, "Flow": 5, "EnableSign": 1 }] }
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[0]; x.Add("data_Detail", dt2); }
放个效果例子吧还是:
{ "result_status": true, "result_Type": "总的合同付款审批台账", "result_msg": "请求成功", "result_data": { "data_listMain": [{ "Id": 18, "AddDate": "2018-06-14T17:29:02.887", "AddUserId": 25, "ContractNum": "00002", "ContractAndName": "第二合同", "BargainMoney": 3000.00, "ContractXDMan": "2312", "BargainSignDate": "", "BargainFile": "", "FilesCount": 222.0, "SYmoney": 2778.0, "data_Detail": [{ "Id": 5, "Issue": "第5期", "Finish": "审批中" }, { "Id": 6, "Issue": "第6期", "Finish": "审批中" }] }, { "Id": 21, "AddDate": "2018-06-14T18:11:00.607", "AddUserId": 25, "ContractNum": "00001", "ContractAndName": "第一合同", "BargainMoney": 200.00, "ContractXDMan": "2", "BargainSignDate": "", "BargainFile": "", "FilesCount": 222.0, "SYmoney": -22.0, "data_Detail": [{ "Id": 4, "Issue": "第4期", "Finish": "审批完" }] }], "data_count": 2 } }
emm还有什么呢?后面再补充吧~
最后附加一个:Word转Pdf方法(官方原生态方法,效果非常好)吧https://www.cnblogs.com/ggll611928/p/9019439.html