java dictionary遍历_C# Dictionary 的几种遍历方法
網(wǎng)上看到的,記錄下來(lái),供參考,備忘
Dictionary list = new Dictionary();
list.Add("d", 1);//3.0以上版本
foreach (var item inlist)
{
Console.WriteLine(item.Key+item.Value);
}//KeyValuePair
foreach (KeyValuePair kv inlist)
{
Console.WriteLine(kv.Key+kv.Value);
}//通過(guò)鍵的集合取
foreach (string key inlist.Keys)
{
Console.WriteLine(key+list[key]);
}//直接取值
foreach (int val inlist.Values)
{
Console.WriteLine(val);
}//非要采用for的方法也可
List test = new List(list.Keys);for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(test[i]+list[test[i]]);
}
Dictionary(?TKey?,?TValue?)
表示鍵和值的集合。
Dictionary(?TKey, TValue)?泛型類提供了從一組鍵到一組值的映射。字典中的每個(gè)添加項(xiàng)都由一個(gè)值及其相關(guān)聯(lián)的鍵組成。通過(guò)鍵來(lái)檢索值的速度是非常快的,接近于 O(1),這是因?yàn)?Dictionary(?TKey, TValue)?類是作為一個(gè)哈希表來(lái)實(shí)現(xiàn)的。(檢索速度取決于為?TKey?指定的類型的哈希算法的質(zhì)量。)
只要對(duì)象用作?Dictionary(?TKey, TValue)?中的鍵,它就不能以任何影響其哈希值的方式更改。使用字典的相等比較器比較時(shí),Dictionary(?TKey, TValue)?中的任何鍵都必須是唯一的。鍵不能為?null?。?但是如果值類型?TValue?為引用類型,該值則可以為空。
Dictionary(?TKey, TValue)?需要一個(gè)相等實(shí)現(xiàn)來(lái)確定鍵是否相等。可以使用一個(gè)接受?comparer?參數(shù)的構(gòu)造函數(shù)來(lái)指定?IEqualityComparer(?T)?)泛型接口的實(shí)現(xiàn);如果不指定實(shí)現(xiàn),則使用默認(rèn)的泛型相等比較器?EqualityComparer(?T)?)?.?Default?。如果類型?TKey?實(shí)現(xiàn)?System.?IEquatable?)?>?)泛型接口,則默認(rèn)相等比較器會(huì)使用該實(shí)現(xiàn)。
Dictionary(?TKey, TValue)?的容量是?Dictionary(?TKey, TValue)?可以包含的元素?cái)?shù)。當(dāng)向?Dictionary(?TKey, TValue)?中添加元素時(shí),將通過(guò)重新分配內(nèi)部數(shù)組來(lái)根據(jù)需要自動(dòng)增大容量。
對(duì)于枚舉而言,字典中的每一項(xiàng)都被視為一個(gè)表示值及其鍵的?KeyValuePair(?TKey, TValue)結(jié)構(gòu)進(jìn)行處理。項(xiàng)返回的順序未定義。
C# 語(yǔ)言的?foreach?語(yǔ)句(在 C++ 中為?for each?,在 Visual Basic 中為?For Each?)需要集合中每個(gè)元素的類型。由于?Dictionary(?TKey, TValue)?是鍵和值的集合,因此元素類型并非鍵類型或值類型。相反,元素類型是鍵類型和值類型的?KeyValuePair(?TKey, TValue)。例如:
此類型的公共靜態(tài)(在 Visual Basic 中為?Shared?)成員是線程安全的。但不能保證任何實(shí)例成員是線程安全的。
只要不修改該集合,Dictionary(?TKey, TValue)?就可以同時(shí)支持多個(gè)閱讀器。即便如此,從頭到尾對(duì)一個(gè)集合進(jìn)行枚舉本質(zhì)上并不是一個(gè)線程安全的過(guò)程。當(dāng)出現(xiàn)枚舉與寫(xiě)訪問(wèn)互相爭(zhēng)用這種極少發(fā)生的情況時(shí),必須在整個(gè)枚舉過(guò)程中鎖定集合。若要允許多個(gè)線程訪問(wèn)集合以進(jìn)行讀寫(xiě)操作,則必須實(shí)現(xiàn)自己的同步。
///summary ///通過(guò)DictionaryK,V傳遞參數(shù) summary ///paramname=sql/param ///paramname=parms/param ///returns/returns public static SqlDataReaderExecuteReader( string sql,Dictionary string , string parms) { SqlDataReadersqlReader= null ;
///
///通過(guò)Dictionary傳遞參數(shù)///
///
///
///
public static SqlDataReader ExecuteReader(string sql, Dictionaryparms)
{
SqlDataReader sqlReader= null;
SqlConnection sqlConn= newSqlConnection(conStr);
SqlCommand sqlCmd= newSqlCommand(sql, sqlConn);foreach (string key inparms.Keys)
{
sqlCmd.Parameters.Add("@" +key, parms[key]);
}
sqlConn.Open();
sqlReader=sqlCmd.ExecuteReader(CommandBehavior.CloseConnection);returnsqlReader;
}
調(diào)用如下:=============
public UserRole GetRoleByID(introleId)
{string sql = string.Format("select id roleid,rolename from userrole where id=@ID",roleId);
Dictionary sqlParams = new Dictionary();
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();
}returnur;
}
總結(jié)
以上是生活随笔為你收集整理的java dictionary遍历_C# Dictionary 的几种遍历方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python阿凡提麦子问题_阿凡提愚弄国
- 下一篇: java的set接口_Java集合-Se