你能熟練使用Dictionary字典和List列表嗎?
網上看到的,記錄下來,供參考,備忘
Dictionary<string,int> list =newDictionary<string,int>();
list.Add("d", 1);
//3.0以上版本
foreach(variteminlist)
{
Console.WriteLine(item.Key + item.Value);
}
//KeyValuePair<T,K>
foreach
{
Console.WriteLine(kv.Key + kv.Value);
}
//通過鍵的集合取
foreach(stringkeyinlist.Keys)
{
Console.WriteLine(key + list[key]);
}
//直接取值
foreach(int
{
Console.WriteLine(val);
}
//非要採用for的方法也可
List<string> test =newList<string>(list.Keys);
for(inti = 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>
publicstatic 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 [email protected]",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;
}