博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# Dictionary 的几种遍历方法
阅读量:5968 次
发布时间:2019-06-19

本文共 2938 字,大约阅读时间需要 9 分钟。

Dictionary<stringint> list = new Dictionary<stringint>();

 

            list.Add("d", 1);

 

            //3.0以上版本

            foreach (var item in list)

            {

                Console.WriteLine(item.Key + item.Value);

            }

            //KeyValuePair<T,K>

            foreach (KeyValuePair<stringint> kv in list)

            {

                Console.WriteLine(kv.Key + kv.Value);

            }

            //过键的集合取

            foreach (string key in list.Keys)

            {

                Console.WriteLine(key + list[key]);

            }

            //直接取值

            foreach (int val in list.Values)

            {

                Console.WriteLine(val);

            } 

            //非要采用for的方法也可

            List<string> test = new List<string>(list.Keys);

 

            for (int i = 0; i < list.Count; i++)

            {

                Console.WriteLine(test[i] + list[test[i]]);

            }

Dictionary( TKey , TValue )

 

表示键和值的集合。

 

Dictionary( TKey, TValue) 泛型类提供了从一组键到一组值的映射。字典中的每个添加项都由一个值及其相关联的键组成。通过键来检索值的速度是非常快的,接近于 O(1),这是因为 Dictionary( TKey, TValue) 类是作为一个哈希表来实现的。(检索速度取决于为 TKey 指定的类型的哈希算法的质量。)

 

 

只要对象用作 Dictionary( TKey, TValue) 中的键,它就不能以任何影响其哈希值的方式更改。使用字典的相等比较器比较时,Dictionary( TKey, TValue) 中的任何键都必须是唯一的。键不能为 null 。 但是如果值类型 TValue 为引用类型,该值则可以为空。

 

Dictionary( TKey, TValue) 需要一个相等实现来确定键是否相等。可以使用一个接受 comparer 参数的构造函数来指定 泛型接口的实现;如果不指定实现,则使用默认的泛型相等比较器 。如果类型 TKey 实现 泛型接口,则默认相等比较器会使用该实现。

 

 

 

Dictionary( TKey, TValue) 的容量是 Dictionary( TKey, TValue) 可以包含的元素数。当向 Dictionary( TKey, TValue) 中添加元素时,将通过重新分配内部数组来根据需要自动增大容量。

 

对于枚举而言,字典中的每一项都被视为一个表示值及其键的 结构进行处理。项返回的顺序未定义。

 

C# 语言的 foreach 语句(在 C++ 中为 for each ,在 Visual Basic 中为 For Each )需要集合中每个元素的类型。由于 Dictionary( TKey, TValue) 是键和值的集合,因此元素类型并非键类型或值类型。相反,元素类型是键类型和值类型的 。例如:

 

此类型的公共静态(在 Visual Basic 中为 Shared )成员是线程安全的。但不能保证任何实例成员是线程安全的。

 

只要不修改该集合,Dictionary( TKey, TValue) 就可以同时支持多个阅读器。即便如此,从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。当出现枚举与写访问互相争用这种极少发生的情况时,必须在整个枚举过程中锁定集合。若要允许多个线程访问集合以进行读写操作,则必须实现自己的同步。

///summary ///通过DictionaryK,V传递参数 summary ///paramname=sql/param ///paramname=parms/param ///returns/returns public static SqlDataReaderExecuteReader( string sql,Dictionary string , string parms) { SqlDataReadersqlReader= null ;
 

/// <summary> 

        /// 通过Dictionary<K,V>传递参数 

        /// </summary> 

        /// <param name="sql"></param> 

        /// <param name="parms"></param> 

        /// <returns></returns> 

        public static SqlDataReader ExecuteReader(string sql, Dictionary<string, string> parms) 

        { 

            SqlDataReader sqlReader = null; 

            SqlConnection sqlConn = new SqlConnection(conStr); 

            SqlCommand sqlCmd = new SqlCommand(sql, sqlConn); 

            foreach (string key in parms.Keys) 

            { 

                sqlCmd.Parameters.Add("@" + key, parms[key]); 

            } 

            sqlConn.Open(); 

            sqlReader = sqlCmd.ExecuteReader(CommandBehavior.CloseConnection); 

            return sqlReader; 

        } 

 

  

 

调用如下: 

 

============= 

 

 public UserRole GetRoleByID(int roleId) 

        { 

            string sql = string.Format("select id roleid,rolename from userrole where id=@ID",roleId); 

            Dictionary<string,string> sqlParams = new Dictionary<string,string>(); 

            sqlParams.Add("ID",roleId.ToString()); 

 

            UserRole ur=null; 

            using (SqlDataReader sqlReader = DBHelper.ExecuteReader(sql,sqlParams)) 

            { 

                while (sqlReader.Read()) 

                { 

                    ur = new UserRole((int)sqlReader["roleid"], sqlReader["rolename"].ToString()); 

                } 

                sqlReader.Close(); 

            } 

            return ur; 

        } 

转载于:https://www.cnblogs.com/itjeff/p/5124624.html

你可能感兴趣的文章
4g伪基站如何实现的
查看>>
用Alamofire进行网络请求的一段代码解析(一)
查看>>
Mac 切换仓库地址后每次都要重新输入密码
查看>>
HTTP深入浅出
查看>>
Java实现的基于socket的一次通信
查看>>
Java系统中如何拆分同步和异步
查看>>
[NOI2014]魔法森林
查看>>
addClass 函数
查看>>
SQL Server (MSSQLSERVER) 服务因 2148081668 服务性错误而停止。
查看>>
nodeJs 接收请求参数和发送请求参数
查看>>
第三次作业——K米评测
查看>>
js 闭包
查看>>
Web工程师必备的43款可视化工具
查看>>
【算法学习笔记】73.数学规律题 SJTU OJ 1058 小M的机器人
查看>>
南理工14级第4组软件课程设计报告
查看>>
27. Spring Boot 部署与服务配置
查看>>
mybatis No enum const class org.apache.ibatis.type.JdbcType.Date 坑爹的配置
查看>>
Tecent Iphone Qzone Clint Login.js(相当规范)
查看>>
Hbuilder连接安卓模拟器,调试app
查看>>
-------------初识----------动态规划。--------------------------------------------
查看>>