当前位置:   article > 正文

C#循环遍历Dictionary,并且可以改变值_c# dictionary 循环

c# dictionary 循环

通常的C#循环遍历是用foreach循环遍历。好处就是简单,但是缺点就是无法在循环中改变Dictionary的值。

Dictionary <string,int>

一下遍历这个Dictionary。

代码:

  1. for (int i = 0; i < HostMessage.Count; i++)
  2. {
  3. var item = HostMessage.ElementAt(i);
  4. Console.WriteLine("key is " + item.Key);
  5. Console.WriteLine("value is " + item.Value);
  6. if (item.Key == "MS01")
  7. {
  8. HostMessage["MT01"] = 102;
  9. }
  10. }

默认HostMessage中有值。

这样就可以了。

我这样写有个BUG,就是在终端输出依旧是没有改变值的,其实是改变了,是不过没有及时输出。要是用以下代码就好了。

  1. for (int i = 0; i < HostMessage.Count; i++)
  2. {
  3. var item = HostMessage.ElementAt(i);
  4. Console.WriteLine("key is " + item.Key);
  5. Console.WriteLine("value is " + item.Value);
  6. if (item.Key == "MS01")
  7. {
  8. HostMessage["MT01"] = 102;
  9. }
  10. }
  11. Console.WriteLine("*****************************8888");
  12. foreach (string key in HostMessage.Keys)
  13. {
  14. Console.WriteLine("Key = {0}, Value = {1}", key, HostMessage[key]);
  15. }

 

-------------------------------------20200810------------------------------------------------------------------------------

更新一个新用法

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

如何输出这个字典?

直接上示例代码

  1. Dictionary<Dictionary<string, int>, string> zh = new Dictionary<Dictionary<string, int>, string>();
  2. Dictionary<string, int> HostM = new Dictionary<string, int>();
  3. Dictionary<string, string> ss = new Dictionary<string, string>();
  4. HostM.Add("MT01", 101);
  5. HostM.Add("MT09",100);
  6. HostM.Add("MT010", 101);
  7. HostM.Add("MT02", 100);
  8. HostM.Add("MT03", 101);
  9. HostM.Add("MT04", 100);
  10. HostM.Add("MT05", 101);
  11. HostM.Add("MT08", 100);
  12. HostM.Add("Ms01", 101);
  13. HostM.Add("Ms02", 100);
  14. HostM.Add("LD01", 101);
  15. HostM.Add("PS01", 100);
  16. ss.Add("MT01", "traytab");
  17. ss.Add("MT09", "solidifyOut");
  18. ss.Add("MT010", "solidifyIn");
  19. ss.Add("MT02", "WBIn");
  20. ss.Add("MT03", "WBOUt");
  21. ss.Add("MT04", "Finish");
  22. ss.Add("MT05", "are");
  23. ss.Add("MT08", "spc");
  24. ss.Add("Ms01", "LDmachine");
  25. ss.Add("Ms02", "qwe");
  26. ss.Add("LD01", "asc");
  27. ss.Add("PS01", "sdf");
  28. foreach (string key in HostM.Keys)
  29. {
  30. Dictionary<string, int> ac = new Dictionary<string, int>();
  31. ac.Add(key, HostM[key]);
  32. zh.Add(ac, ss[key]);
  33. }
  34. foreach (Dictionary<string, int> key in zh.Keys)
  35. {
  36. foreach (string kkey in key.Keys)
  37. {
  38. Console.WriteLine(kkey + "_" + key[kkey] + "_" + zh[key]);
  39. }

这样就可以了。

前面的都是给字典添加内容的,就不说了,解释最后三行代码

  1. foreach (Dictionary<string, int> key in zh.Keys)
  2. {
  3. foreach (string kkey in key.Keys)
  4. {
  5. Console.WriteLine(kkey + "_" + key[kkey] + "_" + zh[key]);
  6. }

第一行,因为zh的key是一个字典,所以foreach的key要设置为Dictionary<string, int> ,第二foreach的kkey因为Dictionary<string, int> 的key是string,所以设置kkey为string。

这样思路就清晰了,kkey是(Dictionary<string, int> 的key(键)key是Dictionary<string, int>字典,所以值为key[kkey].zh[key]为最外围的字典内容。这样只要思路理清了,就输出正确了。

我在这里绕了好久才想明白。 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/977723
推荐阅读
相关标签
  

闽ICP备14008679号