C# Dictionary 的几种遍历方法 用for也可以遍历
2013-04-12 00:47
639 查看
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 ;
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<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; }
相关文章推荐
- C# Dictionary 的几种遍历方法
- C# Dictionary 的几种遍历方法
- C# Dictionary 的几种遍历方法<转>
- C# Dictionary 的几种遍历方法
- C#常见的几种集合 ArrayList,Hashtable,List<T>,Dictionary<K,V> 遍历方法对比
- C# Dictionary 的几种遍历方法
- C# Dictionary 的几种遍历方法
- C#遍历DataSet中数据的几种方法总结
- C#遍历DataSet中数据的几种方法总结
- C#遍历DataSet中数据的几种方法总结
- C# 遍历DataSet中数据的几种方法总结
- C#遍历DataSet中数据的几种方法总结
- C#遍历局域网的几种方法及比较
- C#遍历DataSet中数据的几种方法总结
- C#中Dictionary几种遍历的实现代码
- C#中遍历各类数据集合的方法总结+几种Dictionary遍历方法
- 对数组的每个元素仍是数组的遍历方法,c#,foreach,for
- C#遍历DataSet中数据的几种方法
- C#遍历DataSet中数据的几种方法总结
- C#遍历DataSet中数据的几种方法总结