C#如何對(duì)Dictionary遍歷賦值
C#對(duì)Dictionary遍歷賦值
Dictionary<int, string> datatable = new Dictionary<int, string>(); datatable.Add(1, "hello1"); datatable.Add(2, "hello2"); int[] keys = datatable.Keys.ToArray(); for (int i = 0; i < keys.Length; i++) { if (datatable[keys[i]] == "hello2") { datatable[keys[i]] = "hello"; } }
C#循環(huán)遍歷Dictionary,并且可以改變值
通常的C#循環(huán)遍歷是用foreach循環(huán)遍歷。好處就是簡(jiǎn)單,但是缺點(diǎn)就是無(wú)法在循環(huán)中改變Dictionary的值。
Dictionary <string,int>
一下遍歷這個(gè)Dictionary。
代碼:
for (int i = 0; i < HostMessage.Count; i++) { var item = HostMessage.ElementAt(i); Console.WriteLine("key is " + item.Key); Console.WriteLine("value is " + item.Value); if (item.Key == "MS01") { HostMessage["MT01"] = 102; } }
默認(rèn)HostMessage中有值。
這樣就可以了。
我這樣寫(xiě)有個(gè)BUG,就是在終端輸出依舊是沒(méi)有改變值的,其實(shí)是改變了,是不過(guò)沒(méi)有及時(shí)輸出。要是用以下代碼就好了。
for (int i = 0; i < HostMessage.Count; i++) { var item = HostMessage.ElementAt(i); Console.WriteLine("key is " + item.Key); Console.WriteLine("value is " + item.Value); if (item.Key == "MS01") { HostMessage["MT01"] = 102; } } Console.WriteLine("*****************************8888"); foreach (string key in HostMessage.Keys) { Console.WriteLine("Key = {0}, Value = {1}", key, HostMessage[key]); }
補(bǔ)充:
更新一個(gè)新用法
Dictionary<Dictionary<string, int>, string> zh = new Dictionary<Dictionary<string, int>, string>();
如何輸出這個(gè)字典?
直接上示例代碼
Dictionary<Dictionary<string, int>, string> zh = new Dictionary<Dictionary<string, int>, string>(); Dictionary<string, int> HostM = new Dictionary<string, int>(); Dictionary<string, string> ss = new Dictionary<string, string>(); HostM.Add("MT01", 101); HostM.Add("MT09",100); HostM.Add("MT010", 101); HostM.Add("MT02", 100); HostM.Add("MT03", 101); HostM.Add("MT04", 100); HostM.Add("MT05", 101); HostM.Add("MT08", 100); HostM.Add("Ms01", 101); HostM.Add("Ms02", 100); HostM.Add("LD01", 101); HostM.Add("PS01", 100); ss.Add("MT01", "traytab"); ss.Add("MT09", "solidifyOut"); ss.Add("MT010", "solidifyIn"); ss.Add("MT02", "WBIn"); ss.Add("MT03", "WBOUt"); ss.Add("MT04", "Finish"); ss.Add("MT05", "are"); ss.Add("MT08", "spc"); ss.Add("Ms01", "LDmachine"); ss.Add("Ms02", "qwe"); ss.Add("LD01", "asc"); ss.Add("PS01", "sdf"); foreach (string key in HostM.Keys) { Dictionary<string, int> ac = new Dictionary<string, int>(); ac.Add(key, HostM[key]); zh.Add(ac, ss[key]); } foreach (Dictionary<string, int> key in zh.Keys) { foreach (string kkey in key.Keys) { Console.WriteLine(kkey + "_" + key[kkey] + "_" + zh[key]); }
這樣就可以了。
前面的都是給字典添加內(nèi)容的,就不說(shuō)了,解釋最后三行代碼
foreach (Dictionary<string, int> key in zh.Keys) { foreach (string kkey in key.Keys) { Console.WriteLine(kkey + "_" + key[kkey] + "_" + zh[key]); }
第一行,因?yàn)閦h的key是一個(gè)字典,所以foreach的key要設(shè)置為Dictionary<string, int> ,第二foreach的kkey因?yàn)镈ictionary<string, int> 的key是string,所以設(shè)置kkey為string。
這樣思路就清晰了,kkey是(Dictionary<string, int> 的key(鍵)key是Dictionary<string, int>字典,所以值為key[kkey].zh[key]為最外圍的字典內(nèi)容。這樣只要思路理清了,就輸出正確了。
我在這里繞了好久才想明白。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于WPF實(shí)現(xiàn)控件輪廓跑馬燈動(dòng)畫(huà)效果
這篇文章主要介紹了如何利用WPF實(shí)現(xiàn)控件輪廓跑馬燈動(dòng)畫(huà)效果,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,需要的可以參考一下2022-08-08C#使用SQL DataAdapter數(shù)據(jù)適配代碼實(shí)例
今天小編就為大家分享一篇關(guān)于C#使用SQL DataAdapter數(shù)據(jù)適配代碼實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10c#通過(guò)app.manifest使程序以管理員身份運(yùn)行
通常我們使用c#編寫(xiě)的程序不會(huì)彈出這個(gè)提示,也就無(wú)法以管理員身分運(yùn)行。微軟的操作系統(tǒng)使用微軟的產(chǎn)品方法當(dāng)然是有的,通過(guò)app.manifest配置可以使程序打開(kāi)的時(shí)候,彈出UAC提示需要得到允許才可以繼續(xù),這樣就獲得了管理員的權(quán)限來(lái)執(zhí)行程序2015-01-01WPF實(shí)現(xiàn)多運(yùn)算符表達(dá)式計(jì)算器
這篇文章主要為大家詳細(xì)介紹了WPF實(shí)現(xiàn)多運(yùn)算符表達(dá)式計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11C#中加載dll并調(diào)用其函數(shù)的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇C#中加載dll并調(diào)用其函數(shù)的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02c# 使用Task實(shí)現(xiàn)非阻塞式的I/O操作
這篇文章主要介紹了c# 使用Task實(shí)現(xiàn)非阻塞式的I/O操作,幫助大家更好的理解和學(xué)習(xí)c# 編程語(yǔ)言,感興趣的朋友可以了解下2020-11-11