zoukankan      html  css  js  c++  java
  • C# Dictionary 的几种遍历方法

    Dictionary<string, int> list = new Dictionary<string, int>();

     

                list.Add("d", 1);

     

                //3.0以上版本

                foreach (var item in list)

                {

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

                }

                //KeyValuePair<T,K>

                foreach (KeyValuePair<string, int> 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 参数的构造函数来指定 IEqualityComparer( T) ) 泛型接口的实现;如果不指定实现,则使用默认的泛型相等比较器 EqualityComparer( T) ) . Default 。如果类型 TKey 实现 System. IEquatable< (Of < ( T> ) > ) 泛型接口,则默认相等比较器会使用该实现。

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

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

    C# 语言的 foreach 语句(在 C++ 中为 for each ,在 Visual Basic 中为 For Each )需要集合中每个元素的类型。由于 Dictionary( TKey, TValue) 是键和值的集合,因此元素类型并非键类型或值类型。相反,元素类型是键类型和值类型的 KeyValuePair( 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<stringstring> 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; 

            } 

  • 相关阅读:
    LeetCode题解之Flipping an Image
    LeetCode 之Find Minimum in Rotated Sorted Array
    LeetCode题解Transpose Matrix
    LeetCode 题解之Minimum Index Sum of Two Lists
    LeetCode题解之Intersection of Two Linked Lists
    LeetCode 题解之Add Two Numbers II
    LeetCode题解之Add two numbers
    href="#"与href="javascript:void(0)"的区别
    有关ie9 以下不支持placeholder属性以及获得焦点placeholder的移除
    ie7下属性书写不规范造成的easyui 弹窗布局紊乱
  • 原文地址:https://www.cnblogs.com/itjeff/p/5124624.html
Copyright © 2011-2022 走看看