zoukankan      html  css  js  c++  java
  • C#Dictionary使用记录

    一、区别

    在工作中经常遇到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

  • 相关阅读:
    网络流量测试工具
    关于如何更好地使用Github的一些建议
    error: pcap library not found! 解决方法
    Installation Guide of Ubuntu 14.04, 64bit on Dell Server
    Linux下 查看CPU信息
    Linux下 网卡测速
    DPDK 网卡绑定和解绑
    17秋 软件工程 结对项目 第一次作业(队友副本)
    使用p4c将P4 14代码转换为16代码
    17秋 软件工程 第二次作业 sudoku
  • 原文地址:https://www.cnblogs.com/licongzhuo/p/9212803.html
Copyright © 2011-2022 走看看